{
 "name": "BoardPilot ESP32 parts library",
 "license": "CC-BY-4.0",
 "attribution": "BoardPilot (https://boardpilot.agentflowbind.com)",
 "source": "https://github.com/mojeee/boardpilot/tree/main/parts",
 "generated": "2026-09-28",
 "count": 383,
 "parts": [
  {
   "id": "potentiometer",
   "name": "10 kΩ potentiometer",
   "category": "input",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3, never VIN: the ESP32 ADC must not see more than 3.3 V"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "Wiper, to an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "analog",
   "voltage": "3.3",
   "model": {
    "shape": "pot",
    "size": [
     10,
     12,
     7
    ],
    "color": "#2E6FD8"
   },
   "keywords": [
    "potentiometer",
    "pot",
    "knob",
    "trimmer",
    "variable resistor"
   ],
   "sources": [
    {
     "title": "Espressif ESP-IDF Programming Guide",
     "section": "ADC: input range and attenuation"
    }
   ],
   "starterSketch": "pot"
  },
  {
   "id": "battery-18650-holder",
   "name": "18650 Li-ion cell in holder",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "passive",
     "notes": "3.0 to 4.2 V. Too low for VIN and too high for 3V3: use a regulator"
    },
    {
     "name": "-",
     "role": "passive",
     "notes": "Cell -. Use a protected cell or a protection board"
    }
   ],
   "bus": "gpio",
   "voltage": "3-4.2",
   "model": {
    "shape": "module",
    "size": [
     77,
     21,
     20
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "18650",
    "battery",
    "li-ion",
    "cell holder",
    "batteria",
    "portabatteria"
   ],
   "sources": [
    {
     "title": "Samsung INR18650-25R datasheet",
     "section": "Nominal 3.6 V; charge 4.2 V; discharge cut-off 2.5 V"
    }
   ]
  },
  {
   "id": "keypad-1x4",
   "name": "1x4 membrane keypad (4 keys)",
   "category": "input",
   "pins": [
    {
     "name": "COM",
     "role": "ground",
     "notes": "Common line to GND. On some keypads the common is pin 2: check with a multimeter"
    },
    {
     "name": "K1",
     "role": "digital_out",
     "notes": "Key 1: to a GPIO with INPUT_PULLUP, reads LOW when pressed"
    },
    {
     "name": "K2",
     "role": "digital_out",
     "notes": "Key 2"
    },
    {
     "name": "K3",
     "role": "digital_out",
     "notes": "Key 3"
    },
    {
     "name": "K4",
     "role": "digital_out",
     "notes": "Key 4"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     69,
     20,
     1
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "keypad",
    "1x4",
    "membrane",
    "4 keys",
    "buttons",
    "tastierino",
    "pulsanti"
   ],
   "sources": [
    {
     "title": "Arduino reference",
     "section": "pinMode INPUT_PULLUP"
    },
    {
     "title": "Common 1x4 membrane keypad",
     "section": "5-pin ribbon: one common line and one line per key. Pin order varies"
    }
   ]
  },
  {
   "id": "stepper-28byj48-uln2003",
   "name": "28BYJ-48 stepper + ULN2003 driver",
   "category": "output",
   "pins": [
    {
     "name": "IN1",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN2",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN3",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN4",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "-",
     "role": "ground",
     "notes": "Driver ground. Share it with the ESP32 GND"
    },
    {
     "name": "+",
     "role": "power",
     "notes": "Motor supply 5 V: use VIN (about 240 mA)"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "motor",
    "size": [
     35,
     32,
     19
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "28byj-48",
    "uln2003",
    "stepper",
    "step motor",
    "motore passo passo"
   ],
   "sources": [
    {
     "title": "Texas Instruments ULN2003A datasheet",
     "section": "Darlington array inputs compatible with 3.3 V logic"
    },
    {
     "title": "28BYJ-48 motor datasheet",
     "section": "5 V unipolar, 4-phase"
    }
   ]
  },
  {
   "id": "current-loop-4-20ma",
   "name": "4-20 mA to voltage converter module (HW-685)",
   "category": "sensor",
   "measures": [
    "current"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "passive",
     "notes": "External 7 to 36 V supply (e.g. 12 or 24 V). Never to the ESP32. Pin order varies"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Connect to ESP32 GND too (common ground)"
    },
    {
     "name": "VOUT",
     "role": "analog_out",
     "notes": "Set the span trimmer so 20 mA gives 3.3 V or less before connecting. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "I+",
     "role": "passive",
     "notes": "Current loop in, from the transmitter"
    },
    {
     "name": "I-",
     "role": "passive",
     "notes": "Current loop out"
    }
   ],
   "bus": "analog",
   "voltage": "7-36",
   "model": {
    "shape": "module",
    "size": [
     35,
     25,
     12
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "4-20ma",
    "current loop",
    "hw-685",
    "industrial",
    "transmitter",
    "anello di corrente",
    "industriale"
   ],
   "sources": [
    {
     "title": "HW-685 seller datasheet",
     "section": "Supply 7 to 36 V; 0/4-20 mA in; 0-3.3 / 5 / 10 V out set by zero and span trimmers"
    }
   ]
  },
  {
   "id": "xy-mk-5v-433-rx",
   "name": "433 MHz receiver (XY-MK-5V)",
   "category": "input",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "5 V only (4.5 to 5.5 V)"
    },
    {
     "name": "DATA",
     "role": "digital_out",
     "notes": "Data output at 5 V level: use a voltage divider before the ESP32"
    },
    {
     "name": "DATA2",
     "role": "passive",
     "notes": "Same signal as DATA (joined on the board)"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     30,
     14,
     7
    ],
    "color": "#1E7B3A"
   },
   "keywords": [
    "xy-mk-5v",
    "mx-rm-5v",
    "433 mhz",
    "rf receiver",
    "ricevitore",
    "radio",
    "rc-switch"
   ],
   "sources": [
    {
     "title": "XY-MK-5V 433 MHz receiver module datasheet",
     "section": "Pins VCC, DATA, DATA, GND; supply 5 V DC"
    }
   ]
  },
  {
   "id": "fs1000a-433-tx",
   "name": "433 MHz transmitter (FS1000A)",
   "category": "output",
   "pins": [
    {
     "name": "DATA",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data from an ESP32 GPIO (RadioHead RH_ASK or rc-switch)"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3 to 12 V. Higher voltage gives more range"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "ANT",
     "role": "passive",
     "notes": "Antenna pad: solder a 17.3 cm wire for 433 MHz"
    }
   ],
   "bus": "gpio",
   "voltage": "3-12",
   "model": {
    "shape": "module",
    "size": [
     19,
     19,
     7
    ],
    "color": "#1E7B3A"
   },
   "keywords": [
    "fs1000a",
    "433 mhz",
    "rf transmitter",
    "ask",
    "ook",
    "trasmettitore",
    "radio",
    "rc-switch"
   ],
   "sources": [
    {
     "title": "FS1000A 433 MHz transmitter module datasheet",
     "section": "Pins DATA, VCC, GND; supply 3 to 12 V; ASK/OOK modulation"
    }
   ]
  },
  {
   "id": "hall-49e",
   "name": "49E linear hall sensor (SS49E)",
   "category": "sensor",
   "measures": [
    "magnetic field"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Left leg, printed face towards you. Use 3V3 so the output stays under 3.3 V"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Middle leg"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "Right leg. About VCC/2 with no magnet, moves up or down with field polarity. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     8.6,
     3,
     4
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "49e",
    "ss49e",
    "linear hall",
    "hall",
    "magnet",
    "sensore hall",
    "magnete"
   ],
   "sources": [
    {
     "title": "Honeywell SS49E datasheet",
     "section": "Pin 1 Vs, 2 ground, 3 output; ratiometric output, null at about Vs/2"
    }
   ]
  },
  {
   "id": "keypad-4x3",
   "name": "4x3 membrane keypad (12 keys)",
   "category": "input",
   "pins": [
    {
     "name": "R1",
     "role": "digital_out",
     "notes": "Row 1. Rows are read with INPUT_PULLUP. Adafruit 3x4 keypads use another pin order"
    },
    {
     "name": "R2",
     "role": "digital_out",
     "notes": "Row 2"
    },
    {
     "name": "R3",
     "role": "digital_out",
     "notes": "Row 3"
    },
    {
     "name": "R4",
     "role": "digital_out",
     "notes": "Row 4"
    },
    {
     "name": "C1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Column 1. Columns are driven LOW one at a time"
    },
    {
     "name": "C2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Column 2"
    },
    {
     "name": "C3",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Column 3"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     52,
     64,
     1
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "keypad",
    "4x3",
    "3x4",
    "membrane",
    "matrix keypad",
    "phone keypad",
    "tastierino",
    "tastiera"
   ],
   "sources": [
    {
     "title": "Arduino Keypad library (Mark Stanley, Alexander Brevig)",
     "section": "Row/column scanning; pins 1 to 7 = R1-R4, C1-C3 on common membrane keypads"
    }
   ]
  },
  {
   "id": "keypad-4x4",
   "name": "4x4 membrane keypad",
   "category": "input",
   "pins": [
    {
     "name": "R1",
     "role": "digital_out",
     "notes": "Row 1. Rows are read with INPUT_PULLUP"
    },
    {
     "name": "R2",
     "role": "digital_out",
     "notes": "Row 2"
    },
    {
     "name": "R3",
     "role": "digital_out",
     "notes": "Row 3"
    },
    {
     "name": "R4",
     "role": "digital_out",
     "notes": "Row 4"
    },
    {
     "name": "C1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Column 1. Columns are driven LOW one at a time"
    },
    {
     "name": "C2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Column 2"
    },
    {
     "name": "C3",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Column 3"
    },
    {
     "name": "C4",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Column 4"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     69,
     77,
     1
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "keypad",
    "4x4",
    "membrane",
    "matrix keypad",
    "tastierino",
    "tastiera"
   ],
   "sources": [
    {
     "title": "Arduino Keypad library (Mark Stanley, Alexander Brevig)",
     "section": "Row/column scanning; pin 1 to 8 = R1-R4, C1-C4 on common membrane keypads"
    }
   ]
  },
  {
   "id": "nav-switch-5way",
   "name": "5-way navigation button module",
   "category": "input",
   "pins": [
    {
     "name": "COM",
     "role": "ground",
     "notes": "Common: to GND. Keys read LOW with INPUT_PULLUP"
    },
    {
     "name": "UP",
     "role": "digital_out",
     "notes": "Up"
    },
    {
     "name": "DWN",
     "role": "digital_out",
     "notes": "Down"
    },
    {
     "name": "LFT",
     "role": "digital_out",
     "notes": "Left"
    },
    {
     "name": "RHT",
     "role": "digital_out",
     "notes": "Right"
    },
    {
     "name": "MID",
     "role": "digital_out",
     "notes": "Centre press"
    },
    {
     "name": "SET",
     "role": "digital_out",
     "notes": "Extra SET button"
    },
    {
     "name": "RST",
     "role": "digital_out",
     "notes": "Extra RST button (not the ESP32 reset)"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     26,
     26,
     12
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "5-way switch",
    "navigation switch",
    "joystick button",
    "directional",
    "menu",
    "pulsante a 5 vie"
   ],
   "sources": [
    {
     "title": "ALPS Alpine SKRH multi-directional switch datasheet",
     "section": "Common terminal and five direction contacts"
    },
    {
     "title": "Common 5-way navigation module",
     "section": "Header COM, UP, DWN, LFT, RHT, MID, SET, RST. Check the silkscreen"
    }
   ]
  },
  {
   "id": "seg7-4digit-cc",
   "name": "7-segment 4 digits 0.56\" common cathode (12 pins)",
   "category": "display",
   "pins": [
    {
     "name": "E",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Segment. Each segment through a 220 Ω resistor"
    },
    {
     "name": "D",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "DP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Decimal point"
    },
    {
     "name": "C",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "G",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "DIG4",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Digit 4 cathode: LOW = digit on. A transistor per digit is safer (up to 8 segments)"
    },
    {
     "name": "B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "DIG3",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Digit 3 cathode"
    },
    {
     "name": "DIG2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Digit 2 cathode"
    },
    {
     "name": "F",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "DIG1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Digit 1 cathode"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     50,
     19,
     8
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "7 segment",
    "4 digit",
    "5641as",
    "multiplexed",
    "common cathode",
    "display 7 segmenti"
   ],
   "sources": [
    {
     "title": "5641AS 0.56\" 4-digit 7-segment datasheet",
     "section": "Pins 1 to 12: E D DP C G D4 B D3 D2 F A D1"
    }
   ]
  },
  {
   "id": "seg7-1digit-ca",
   "name": "7-segment digit 0.56\" common anode",
   "category": "display",
   "pins": [
    {
     "name": "E",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Segment: LOW = on. Each segment through a 220 Ω resistor"
    },
    {
     "name": "D",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "COM",
     "role": "power",
     "notes": "Common anode: to 3V3"
    },
    {
     "name": "C",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "DP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Decimal point"
    },
    {
     "name": "B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "COM2",
     "role": "power",
     "notes": "Second common pin, same as COM"
    },
    {
     "name": "F",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "G",
     "role": "digital_in",
     "needsOutput": true
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "chip",
    "size": [
     26.4,
     19,
     8
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "7 segment",
    "common anode",
    "5161bs",
    "digit",
    "display 7 segmenti",
    "anodo comune"
   ],
   "sources": [
    {
     "title": "5161BS 0.56\" 7-segment datasheet",
     "section": "Pins 1 to 10: E D COM C DP B A COM F G"
    }
   ]
  },
  {
   "id": "seg7-1digit-cc",
   "name": "7-segment digit 0.56\" common cathode",
   "category": "display",
   "pins": [
    {
     "name": "E",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Segment. Each segment through a 220 Ω resistor"
    },
    {
     "name": "D",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "COM",
     "role": "ground",
     "notes": "Common cathode: to GND"
    },
    {
     "name": "C",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "DP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Decimal point"
    },
    {
     "name": "B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "COM2",
     "role": "ground",
     "notes": "Second common pin, same as COM"
    },
    {
     "name": "F",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "G",
     "role": "digital_in",
     "needsOutput": true
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     26.4,
     19,
     8
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "7 segment",
    "common cathode",
    "5161as",
    "digit",
    "display 7 segmenti",
    "catodo comune"
   ],
   "sources": [
    {
     "title": "5161AS 0.56\" 7-segment datasheet",
     "section": "Pins 1 to 10: E D COM C DP B A COM F G"
    }
   ]
  },
  {
   "id": "shift-register-74hc165",
   "name": "74HC165 input shift register",
   "category": "input",
   "pins": [
    {
     "name": "PL",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Parallel load, active LOW: pulse LOW to capture the inputs"
    },
    {
     "name": "CP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Clock"
    },
    {
     "name": "D4",
     "role": "passive",
     "notes": "Parallel input 4"
    },
    {
     "name": "D5",
     "role": "passive"
    },
    {
     "name": "D6",
     "role": "passive"
    },
    {
     "name": "D7",
     "role": "passive"
    },
    {
     "name": "Q7N",
     "role": "passive",
     "notes": "Inverted serial output, not needed"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "Q7",
     "role": "digital_out",
     "notes": "Serial data out: to an ESP32 input"
    },
    {
     "name": "DS",
     "role": "passive",
     "notes": "Serial in from the next 74HC165. Tie to GND on the last one"
    },
    {
     "name": "D0",
     "role": "passive",
     "notes": "Parallel input 0: to a button with a pull-up or pull-down"
    },
    {
     "name": "D1",
     "role": "passive"
    },
    {
     "name": "D2",
     "role": "passive"
    },
    {
     "name": "D3",
     "role": "passive"
    },
    {
     "name": "CE",
     "role": "passive",
     "notes": "Clock enable, active LOW. Tie to GND"
    },
    {
     "name": "VCC",
     "role": "power"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     41.6,
     6.4,
     3.3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "74hc165",
    "shift register",
    "parallel in",
    "more inputs",
    "sn74hc165",
    "registro a scorrimento"
   ],
   "sources": [
    {
     "title": "Nexperia 74HC165 datasheet",
     "section": "Pinning: pin 1 PL to pin 16 VCC; function table; supply 2 to 6 V"
    }
   ]
  },
  {
   "id": "shift-register-74hc595",
   "name": "74HC595 shift register",
   "category": "output",
   "pins": [
    {
     "name": "Q1",
     "role": "passive",
     "notes": "Output 1"
    },
    {
     "name": "Q2",
     "role": "passive"
    },
    {
     "name": "Q3",
     "role": "passive"
    },
    {
     "name": "Q4",
     "role": "passive"
    },
    {
     "name": "Q5",
     "role": "passive"
    },
    {
     "name": "Q6",
     "role": "passive"
    },
    {
     "name": "Q7",
     "role": "passive"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "Q7S",
     "role": "passive",
     "notes": "Serial out to the next 74HC595"
    },
    {
     "name": "MR",
     "role": "passive",
     "notes": "Master reset, active LOW: tie to VCC"
    },
    {
     "name": "SHCP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Shift clock"
    },
    {
     "name": "STCP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Latch clock"
    },
    {
     "name": "OE",
     "role": "passive",
     "notes": "Output enable, active LOW: tie to GND"
    },
    {
     "name": "DS",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Serial data in"
    },
    {
     "name": "Q0",
     "role": "passive",
     "notes": "Output 0"
    },
    {
     "name": "VCC",
     "role": "power"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     41.6,
     6.4,
     3.3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "74hc595",
    "shift register",
    "sn74hc595",
    "more outputs",
    "registro a scorrimento"
   ],
   "sources": [
    {
     "title": "Nexperia 74HC595 datasheet",
     "section": "Pinning: pin 1 Q1 to pin 16 VCC; supply 2 to 6 V"
    }
   ]
  },
  {
   "id": "a02yyuw",
   "name": "A02YYUW waterproof ultrasonic distance (UART)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire. Use 3V3 so TX stays at 3.3 V"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Yellow wire. Mode select: HIGH or open = processed value, LOW = real-time value"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud). White wire"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     50,
     40,
     30
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "a02yyuw",
    "dfrobot",
    "waterproof",
    "ultrasonic",
    "tank level",
    "ultrasuoni",
    "distanza",
    "impermeabile"
   ],
   "sources": [
    {
     "title": "DFRobot SEN0311 A02YYUW wiki",
     "section": "Supply 3.3 to 5 V; UART 9600 baud; range 3 to 450 cm; wires red VCC, black GND, yellow RX, white TX"
    }
   ]
  },
  {
   "id": "hall-a3144",
   "name": "A3144 hall effect switch",
   "category": "sensor",
   "measures": [
    "magnetic field"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Left leg, printed face towards you. Needs at least 4.5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Middle leg"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "Right leg. Open collector: use INPUT_PULLUP (to 3.3 V), never a pull-up to 5 V"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "chip",
    "size": [
     8.6,
     3,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "a3144",
    "hall",
    "magnet",
    "magnetic switch",
    "sensore hall",
    "magnete"
   ],
   "sources": [
    {
     "title": "Allegro A3141/2/3/4 datasheet",
     "section": "Pin 1 supply, 2 ground, 3 output (open collector); supply 4.5 to 24 V"
    }
   ]
  },
  {
   "id": "a4988-driver",
   "name": "A4988 stepper driver",
   "category": "output",
   "pins": [
    {
     "name": "EN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Enable, active LOW. Leave unconnected to keep it on"
    },
    {
     "name": "MS1",
     "role": "passive",
     "notes": "Microstep select"
    },
    {
     "name": "MS2",
     "role": "passive",
     "notes": "Microstep select"
    },
    {
     "name": "MS3",
     "role": "passive",
     "notes": "Microstep select"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Tie to SLP to keep the driver running"
    },
    {
     "name": "SLP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Tie to RST to keep the driver running"
    },
    {
     "name": "STEP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "One pulse = one step"
    },
    {
     "name": "DIR",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Direction"
    },
    {
     "name": "VMOT",
     "role": "passive",
     "notes": "Motor supply 8 to 35 V from a separate supply. Add a 100 µF capacitor"
    },
    {
     "name": "GND_MOT",
     "role": "ground",
     "notes": "Motor supply ground"
    },
    {
     "name": "2B",
     "role": "passive",
     "notes": "Motor coil 2"
    },
    {
     "name": "2A",
     "role": "passive",
     "notes": "Motor coil 2"
    },
    {
     "name": "1A",
     "role": "passive",
     "notes": "Motor coil 1"
    },
    {
     "name": "1B",
     "role": "passive",
     "notes": "Motor coil 1"
    },
    {
     "name": "VDD",
     "role": "power",
     "notes": "Logic supply: 3V3"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     41.6,
     15.2,
     10
    ],
    "color": "#B22222"
   },
   "keywords": [
    "a4988",
    "stepper driver",
    "pololu",
    "nema17",
    "driver passo passo",
    "stampante 3d"
   ],
   "sources": [
    {
     "title": "Allegro A4988 datasheet",
     "section": "Logic supply 3 to 5.5 V; motor supply 8 to 35 V"
    },
    {
     "title": "Pololu A4988 stepper driver carrier",
     "section": "Pinout and minimal wiring (RST to SLP)"
    }
   ]
  },
  {
   "id": "acs712",
   "name": "ACS712 current sensor module",
   "category": "sensor",
   "measures": [
    "current"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "Sits at 2.5 V with no current and can reach 5 V: use a voltage divider before the ADC"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "IP+",
     "role": "passive",
     "notes": "Screw terminal: current path in. Never wire to the ESP32"
    },
    {
     "name": "IP-",
     "role": "passive",
     "notes": "Screw terminal: current path out"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     31,
     13,
     10
    ],
    "color": "#B22222"
   },
   "keywords": [
    "acs712",
    "current",
    "hall",
    "ammeter",
    "corrente",
    "sensore corrente"
   ],
   "sources": [
    {
     "title": "Allegro ACS712 datasheet",
     "section": "Output VCC/2 at zero current; sensitivity 185/100/66 mV per A (5/20/30 A versions)"
    },
    {
     "title": "Allegro ACS712 datasheet",
     "section": "Supply 4.5 to 5.5 V"
    }
   ]
  },
  {
   "id": "acs723",
   "name": "ACS723 current sensor module",
   "category": "sensor",
   "measures": [
    "current"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "Bidirectional versions sit at 2.5 V at 0 A and can reach 5 V: use a divider before the ADC"
    },
    {
     "name": "IP+",
     "role": "passive",
     "notes": "Current path in. Never wire to the ESP32"
    },
    {
     "name": "IP-",
     "role": "passive",
     "notes": "Current path out"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     25,
     18,
     8
    ],
    "color": "#B22222"
   },
   "keywords": [
    "acs723",
    "current",
    "hall",
    "isolated",
    "corrente",
    "sensore corrente"
   ],
   "sources": [
    {
     "title": "Allegro ACS723 datasheet",
     "section": "Supply 4.5 to 5.5 V; sensitivity 05AB 400 mV/A, 10AB 200 mV/A, 20AB 100 mV/A, 40AB 50 mV/A"
    }
   ]
  },
  {
   "id": "acs758",
   "name": "ACS758 high-current sensor module (50-200 A)",
   "category": "sensor",
   "measures": [
    "current"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "Bidirectional: VCC/2 at zero current, up to 5 V: use a voltage divider before the ADC"
    },
    {
     "name": "IP+",
     "role": "passive",
     "notes": "Current path in (bolt/terminal). Never wire to the ESP32"
    },
    {
     "name": "IP-",
     "role": "passive",
     "notes": "Current path out"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     35,
     25,
     10
    ],
    "color": "#B22222"
   },
   "keywords": [
    "acs758",
    "current",
    "hall",
    "high current",
    "battery",
    "corrente",
    "sensore corrente"
   ],
   "sources": [
    {
     "title": "Allegro ACS758 datasheet",
     "section": "Sensitivity at 5 V: 050B 40 mV/A, 100B 20 mV/A; bidirectional output VCC/2 at 0 A"
    }
   ]
  },
  {
   "id": "buzzer-active",
   "name": "Active buzzer",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Longer leg. To a GPIO: HIGH beeps. Loud buzzers need a transistor"
    },
    {
     "name": "-",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "led",
    "size": [
     12,
     12,
     9.5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "active buzzer",
    "buzzer",
    "beeper",
    "alarm",
    "cicalino",
    "allarme"
   ],
   "sources": [
    {
     "title": "Generic 12 mm active buzzer datasheet",
     "section": "Built-in oscillator: sounds with DC applied"
    }
   ]
  },
  {
   "id": "ad-keyboard-5key",
   "name": "AD keyboard (5 keys on one analog pin)",
   "category": "input",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3 so OUT never goes above 3.3 V"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "A different voltage for each key: read it on an ADC1 pin (GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     48,
     24,
     10
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ad keyboard",
    "analog keypad",
    "resistor ladder",
    "5 keys",
    "buttons",
    "tastiera analogica",
    "pulsanti"
   ],
   "sources": [
    {
     "title": "DFRobot ADKeyboard module (DFR0075) wiki",
     "section": "Resistor ladder: each key gives a different analog value"
    },
    {
     "title": "Espressif ESP-IDF Programming Guide",
     "section": "ADC: input range and attenuation"
    }
   ]
  },
  {
   "id": "ad8232-ecg",
   "name": "AD8232 ECG heart monitor",
   "category": "sensor",
   "measures": [
    "ecg",
    "heart rate"
   ],
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "3V3",
     "role": "power",
     "notes": "Use 3V3 only (chip maximum 3.5 V)"
    },
    {
     "name": "OUTPUT",
     "role": "analog_out",
     "notes": "ECG signal. To an ADC1 pin (GPIO 32 to 39)"
    },
    {
     "name": "LO-",
     "role": "digital_out",
     "notes": "Leads-off detect -, HIGH when an electrode is loose"
    },
    {
     "name": "LO+",
     "role": "digital_out",
     "notes": "Leads-off detect +, HIGH when an electrode is loose"
    },
    {
     "name": "SDN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Shutdown, active LOW. Can be left unconnected"
    },
    {
     "name": "RA",
     "role": "passive",
     "notes": "Right arm electrode pad (also on the 3.5 mm jack)"
    },
    {
     "name": "LA",
     "role": "passive",
     "notes": "Left arm electrode pad (also on the 3.5 mm jack)"
    },
    {
     "name": "RL",
     "role": "passive",
     "notes": "Right leg electrode pad (also on the 3.5 mm jack)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     36,
     28,
     5
    ],
    "color": "#B22222"
   },
   "keywords": [
    "ad8232",
    "ecg",
    "ekg",
    "heart",
    "elettrocardiogramma",
    "battito",
    "cuore"
   ],
   "sources": [
    {
     "title": "Analog Devices AD8232 datasheet",
     "section": "Supply 2.0 to 3.5 V; leads-off detection outputs LOD+ and LOD-"
    },
    {
     "title": "SparkFun AD8232 hookup guide",
     "section": "Pins GND, 3.3v, OUTPUT, LO-, LO+, SDN; pads RA, LA, RL. Not a medical device"
    }
   ]
  },
  {
   "id": "ads1015",
   "name": "ADS1015 12-bit ADC",
   "category": "sensor",
   "measures": [
    "voltage"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "ADDR",
     "role": "passive",
     "notes": "Address select: GND 0x48, VDD 0x49, SDA 0x4A, SCL 0x4B"
    },
    {
     "name": "ALRT",
     "role": "int",
     "notes": "Alert / ready output, optional"
    },
    {
     "name": "A0",
     "role": "passive",
     "notes": "Analog input. Never above VDD"
    },
    {
     "name": "A1",
     "role": "passive",
     "notes": "Analog input"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Analog input"
    },
    {
     "name": "A3",
     "role": "passive",
     "notes": "Analog input"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x48",
    "0x49",
    "0x4A",
    "0x4B"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     28,
     17.5,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ads1015",
    "adc",
    "analog to digital",
    "12 bit",
    "convertitore",
    "analogico"
   ],
   "sources": [
    {
     "title": "Texas Instruments ADS101x datasheet",
     "section": "ADDR pin connection and slave address (0x48 to 0x4B); 12-bit, up to 3300 samples/s"
    }
   ]
  },
  {
   "id": "ads1115",
   "name": "ADS1115 16-bit ADC",
   "category": "sensor",
   "measures": [
    "voltage"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "ADDR",
     "role": "passive",
     "notes": "Address select: GND 0x48, VDD 0x49, SDA 0x4A, SCL 0x4B"
    },
    {
     "name": "ALRT",
     "role": "int",
     "notes": "Alert / ready output, optional"
    },
    {
     "name": "A0",
     "role": "passive",
     "notes": "Analog input. Never above VDD"
    },
    {
     "name": "A1",
     "role": "passive",
     "notes": "Analog input"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Analog input"
    },
    {
     "name": "A3",
     "role": "passive",
     "notes": "Analog input"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x48",
    "0x49",
    "0x4A",
    "0x4B"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     28,
     17.5,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ads1115",
    "adc",
    "analog to digital",
    "16 bit",
    "convertitore",
    "analogico"
   ],
   "sources": [
    {
     "title": "Texas Instruments ADS111x datasheet",
     "section": "ADDR pin connection and corresponding slave address (0x48 to 0x4B)"
    }
   ]
  },
  {
   "id": "adxl362",
   "name": "ADXL362 ultra-low-power accelerometer (SPI)",
   "category": "sensor",
   "measures": [
    "acceleration",
    "motion"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3. Pin order differs between breakouts: check the silkscreen"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "SCLK",
     "role": "spi_sck"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi",
     "notes": "Marked SDI on some boards"
    },
    {
     "name": "MISO",
     "role": "spi_miso",
     "notes": "Marked SDO on some boards"
    },
    {
     "name": "INT1",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "INT2",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "breakout",
    "size": [
     22,
     18,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "adxl362",
    "analog devices",
    "accelerometer",
    "spi",
    "low power",
    "wake up",
    "accelerometro"
   ],
   "sources": [
    {
     "title": "Analog Devices ADXL362 datasheet",
     "section": "SPI only; register 0x00 DEVID_AD reads 0xAD (read command 0x0B)"
    },
    {
     "title": "Analog Devices ADXL362 datasheet",
     "section": "Supply 1.6 to 3.5 V"
    }
   ]
  },
  {
   "id": "adxl375",
   "name": "ADXL375 high-g accelerometer (±200 g)",
   "category": "sensor",
   "measures": [
    "acceleration"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "Output of the on-board 3.3 V regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "Address select: LOW = 0x53, HIGH = 0x1D"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "SPI chip select. Leave unconnected or HIGH for I2C"
    },
    {
     "name": "INT1",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "INT2",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x53",
    "0x1D"
   ],
   "idCheck": {
    "register": "0x00",
    "expect": "0xe5"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "adxl375",
    "high g",
    "shock",
    "impact",
    "accelerometer",
    "urto",
    "accelerometro"
   ],
   "sources": [
    {
     "title": "Analog Devices ADXL375 datasheet",
     "section": "Register 0x00 DEVID (reads 0xE5, same value as ADXL345)"
    },
    {
     "title": "Analog Devices ADXL375 datasheet",
     "section": "I2C address 0x53 (ALT ADDRESS LOW) / 0x1D (HIGH)"
    }
   ]
  },
  {
   "id": "aht10",
   "name": "AHT10 temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x38",
    "0x39"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     16,
     11,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "aht10",
    "aosong",
    "humidity",
    "temperature",
    "umidità"
   ],
   "sources": [
    {
     "title": "Aosong AHT10 datasheet",
     "section": "I2C address 0x38 (ADR pin LOW), 0x39 (ADR pin HIGH)"
    }
   ]
  },
  {
   "id": "aht20-bmp280",
   "name": "AHT20 + BMP280 combo module",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity",
    "pressure"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x38",
    "0x77"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     15,
     12,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "aht20",
    "bmp280",
    "combo",
    "humidity",
    "pressure",
    "temperature",
    "umidità",
    "pressione"
   ],
   "sources": [
    {
     "title": "Aosong AHT20 datasheet",
     "section": "I2C address 0x38"
    },
    {
     "title": "Bosch BMP280 datasheet",
     "section": "I2C interface: 0x77 when SDO = VDDIO (as wired on most combo boards)"
    }
   ]
  },
  {
   "id": "aht20",
   "name": "AHT20 temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x38"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     12,
     12,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "aht20",
    "aht21",
    "aosong",
    "humidity",
    "temperature",
    "umidità"
   ],
   "sources": [
    {
     "title": "Aosong AHT20 datasheet",
     "section": "I2C address 0x38"
    },
    {
     "title": "Aosong AHT20 datasheet",
     "section": "Supply voltage 2.2 to 5.5 V"
    }
   ]
  },
  {
   "id": "am2301-dht21",
   "name": "AM2301 (DHT21) wired temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    },
    {
     "name": "DATA",
     "role": "onewire",
     "notes": "Yellow wire. Add a 4.7 to 10 kΩ pull-up to 3.3 V if readings fail"
    }
   ],
   "bus": "onewire",
   "voltage": "3.3-5",
   "model": {
    "shape": "dht",
    "size": [
     59,
     27,
     13
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "am2301",
    "dht21",
    "aosong",
    "humidity",
    "temperature",
    "umidità",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Aosong AM2301 datasheet",
     "section": "Wires: red VDD, yellow data, black GND; supply 3.3 to 5.2 V; single-bus protocol like DHT22"
    }
   ]
  },
  {
   "id": "am2320",
   "name": "AM2320 temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power",
     "notes": "Pin 1 (left, grille facing you)"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "Needs a pull-up to 3.3 V (about 4.7 kΩ)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "Needs a pull-up to 3.3 V (about 4.7 kΩ). Tie SCL to GND at power-up to use the one-wire mode instead"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x5C"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "dht",
    "size": [
     12.5,
     22,
     7
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "am2320",
    "aosong",
    "humidity",
    "temperature",
    "umidità",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Aosong AM2320 datasheet",
     "section": "Pin 1 VDD, 2 SDA, 3 GND, 4 SCL; supply 3.1 to 5.5 V"
    },
    {
     "title": "Aosong AM2320 datasheet",
     "section": "I2C address 0xB8 (8-bit) = 0x5C; sleeps between reads and must be woken first, so a plain scan can miss it"
    }
   ]
  },
  {
   "id": "am312",
   "name": "AM312 mini PIR motion sensor",
   "category": "sensor",
   "measures": [
    "motion"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "HIGH when motion is detected"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     10,
     10,
     23
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "am312",
    "mini pir",
    "pir",
    "motion",
    "movimento",
    "presenza"
   ],
   "sources": [
    {
     "title": "Nanyang Senba AM312 datasheet",
     "section": "Supply 2.7 to 12 V; digital output"
    }
   ]
  },
  {
   "id": "amg8833",
   "name": "AMG8833 8×8 thermal camera",
   "category": "sensor",
   "measures": [
    "thermal image",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x69",
    "0x68"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     25.4,
     6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "amg8833",
    "panasonic",
    "grid-eye",
    "thermal camera",
    "infrared",
    "termocamera",
    "infrarossi"
   ],
   "sources": [
    {
     "title": "Panasonic Grid-EYE AMG88 datasheet",
     "section": "I2C address 0x69 (AD_SELECT HIGH) or 0x68 (LOW); 8×8 pixels, 0 to 80 °C"
    },
    {
     "title": "Adafruit AMG8833 guide",
     "section": "Pinout VIN, 3Vo, GND, SCL, SDA, INT"
    }
   ]
  },
  {
   "id": "ams1117-33-module",
   "name": "AMS1117-3.3 regulator module",
   "category": "output",
   "pins": [
    {
     "name": "VIN",
     "role": "passive",
     "notes": "Pin order varies between boards: match by the printed label. Input 4.5 to 12 V (about 1.1 V more than 3.3 V is needed)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VOUT",
     "role": "passive",
     "notes": "3.3 V out, up to about 800 mA. Gets hot at high input voltage"
    }
   ],
   "bus": "gpio",
   "voltage": "4.5-12",
   "model": {
    "shape": "module",
    "size": [
     25,
     11,
     5
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ams1117",
    "3.3v",
    "regulator",
    "ldo",
    "linear regulator",
    "regolatore"
   ],
   "sources": [
    {
     "title": "Advanced Monolithic Systems AMS1117 datasheet",
     "section": "Dropout 1.1 V at 800 mA; max input 15 V"
    }
   ]
  },
  {
   "id": "joystick-ky023",
   "name": "Analog joystick (KY-023)",
   "category": "input",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "+5V",
     "role": "power",
     "notes": "Connect to 3V3 anyway, so the outputs stay within the ADC range"
    },
    {
     "name": "VRX",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "VRY",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "SW",
     "role": "digital_out",
     "notes": "Button: LOW when pressed. Use INPUT_PULLUP"
    }
   ],
   "bus": "analog",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     34,
     26,
     32
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "joystick",
    "ky-023",
    "thumbstick",
    "analog",
    "levetta",
    "controller"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-023 datasheet",
     "section": "Pins GND, +5V, VRx, VRy, SW; two 10 kΩ potentiometers"
    }
   ]
  },
  {
   "id": "apa102-strip",
   "name": "APA102 / SK9822 LED strip (clock + data)",
   "category": "display",
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Pin order varies between boards: match by the printed label. Use VIN for a few LEDs; a separate 5 V supply for more (up to 60 mA per LED)"
    },
    {
     "name": "CI",
     "role": "spi_sck",
     "notes": "Clock in. Works with SPI; a 3.3 V to 5 V level shifter makes it reliable"
    },
    {
     "name": "DI",
     "role": "spi_mosi",
     "notes": "Data in. Has no chip select: give the strip its own SPI bus"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "spi",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     60,
     12,
     2
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "apa102",
    "sk9822",
    "dotstar",
    "led strip",
    "addressable",
    "rgb",
    "striscia led"
   ],
   "sources": [
    {
     "title": "APA102 (Shiji Lighting) datasheet",
     "section": "Two-wire clock and data input; supply 5 V"
    }
   ]
  },
  {
   "id": "apds9960",
   "name": "APDS-9960 gesture, proximity + colour",
   "category": "sensor",
   "measures": [
    "gesture",
    "proximity",
    "color",
    "light"
   ],
   "pins": [
    {
     "name": "VL",
     "role": "passive",
     "notes": "IR LED supply. Most boards link it to VCC with a solder jumper"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output (active LOW)"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x39"
   ],
   "idCheck": {
    "register": "0x92",
    "expect": "0xAB"
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "apds9960",
    "apds-9960",
    "gesture",
    "proximity",
    "color",
    "gesti",
    "prossimità",
    "colore"
   ],
   "sources": [
    {
     "title": "Broadcom APDS-9960 datasheet",
     "section": "Register 0x92 ID (reads 0xAB)"
    },
    {
     "title": "Broadcom APDS-9960 datasheet",
     "section": "I2C address 0x39; supply 2.4 to 3.6 V"
    }
   ]
  },
  {
   "id": "arcade-button-led",
   "name": "Arcade button 30 mm with LED",
   "category": "input",
   "pins": [
    {
     "name": "COM",
     "role": "ground",
     "notes": "Switch common"
    },
    {
     "name": "NO",
     "role": "digital_out",
     "notes": "Normally open: to a GPIO with INPUT_PULLUP, reads LOW when pressed"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Normally closed, not needed"
    },
    {
     "name": "LED+",
     "role": "passive",
     "notes": "LED anode. Built-in resistor for 5 V or 12 V: drive it through a transistor"
    },
    {
     "name": "LED-",
     "role": "ground",
     "notes": "LED cathode"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "button",
    "size": [
     33,
     33,
     35
    ],
    "color": "#D0312D"
   },
   "keywords": [
    "arcade button",
    "push button",
    "led button",
    "microswitch",
    "pulsante",
    "pulsante arcade"
   ],
   "sources": [
    {
     "title": "Omron V-series basic switch datasheet",
     "section": "Terminals COM, NO, NC"
    },
    {
     "title": "Arduino reference",
     "section": "pinMode INPUT_PULLUP"
    }
   ]
  },
  {
   "id": "arducam-mini-2mp",
   "name": "ArduCAM Mini 2MP camera (OV2640, SPI)",
   "category": "sensor",
   "measures": [
    "image"
   ],
   "pins": [
    {
     "name": "CS",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 or 5 V"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "Camera settings (SCCB, address 0x30)"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    }
   ],
   "bus": "spi",
   "addresses": [
    "0x30"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     34,
     24,
     25
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "arducam",
    "ov2640",
    "camera",
    "2mp",
    "jpeg",
    "fotocamera",
    "telecamera"
   ],
   "sources": [
    {
     "title": "ArduCAM Mini 2MP (OV2640) camera module datasheet",
     "section": "8-pin header CS, MOSI, MISO, SCK, GND, VCC, SDA, SCL; SPI up to 8 MHz"
    },
    {
     "title": "OmniVision OV2640 datasheet",
     "section": "SCCB address 0x60/0x61 (7-bit 0x30)"
    }
   ]
  },
  {
   "id": "as5048a",
   "name": "AS5048A magnetic angle encoder (SPI)",
   "category": "sensor",
   "measures": [
    "angle",
    "rotation"
   ],
   "pins": [
    {
     "name": "3V3",
     "role": "power",
     "notes": "Use this pin with the ESP32. Pin order differs between adapter boards"
    },
    {
     "name": "5V",
     "role": "passive",
     "notes": "Only for 5 V systems. Leave unconnected when you use 3V3"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CSN",
     "role": "spi_cs"
    },
    {
     "name": "CLK",
     "role": "spi_sck"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "PWM",
     "role": "digital_out",
     "notes": "Angle as PWM duty cycle. Optional"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "breakout",
    "size": [
     25,
     25,
     1.6
    ],
    "color": "#1E7A3C"
   },
   "keywords": [
    "as5048a",
    "as5048",
    "ams",
    "magnetic encoder",
    "angle",
    "gimbal",
    "angolo"
   ],
   "sources": [
    {
     "title": "ams AS5048A/AS5048B datasheet",
     "section": "SPI interface (mode 1), 14-bit angle register 0x3FFF"
    },
    {
     "title": "ams AS5048A/AS5048B datasheet",
     "section": "3.3 V or 5 V supply modes"
    }
   ]
  },
  {
   "id": "as5600",
   "name": "AS5600 magnetic angle encoder",
   "category": "sensor",
   "measures": [
    "angle",
    "rotation"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3 so OUT stays under 3.3 V"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "Angle as analog voltage (or PWM, if configured). Optional. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIR",
     "role": "passive",
     "notes": "Direction: GND = angle grows clockwise, VCC = counter-clockwise. Never leave floating"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "GPO",
     "role": "passive",
     "notes": "Programming pin. Leave unconnected"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x36"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "breakout",
    "size": [
     23,
     23,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "as5600",
    "ams",
    "magnetic encoder",
    "angle",
    "encoder magnetico",
    "angolo"
   ],
   "sources": [
    {
     "title": "ams AS5600 datasheet",
     "section": "Fixed I2C address 0x36; RAW ANGLE registers 0x0C/0x0D, 12 bit"
    },
    {
     "title": "ams AS5600 datasheet",
     "section": "DIR pin sets the rotation direction and must not float; 3.3 V or 5 V operation"
    }
   ]
  },
  {
   "id": "fingerprint-as608",
   "name": "AS608 optical fingerprint sensor",
   "category": "input",
   "pins": [
    {
     "name": "V+",
     "role": "power",
     "notes": "3.3 V"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (57600 baud by default)"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "WAK",
     "role": "digital_out",
     "notes": "Touch output: HIGH when a finger is on the glass, optional"
    },
    {
     "name": "VT",
     "role": "passive",
     "notes": "Touch sensor supply: 3.3 V, optional"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     21,
     40,
     20
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "as608",
    "fingerprint",
    "r307",
    "r503",
    "biometric",
    "impronta digitale",
    "lettore impronte"
   ],
   "sources": [
    {
     "title": "Synochip AS608 fingerprint module user manual",
     "section": "UART 57600 baud default; supply 3.3 V; pins V+, TX, RX, GND, WAK, Vt. Wire colours vary"
    },
    {
     "title": "Adafruit Fingerprint Sensor Library",
     "section": "Default password 0x00000000"
    }
   ]
  },
  {
   "id": "as7341",
   "name": "AS7341 11-channel spectral sensor",
   "category": "sensor",
   "measures": [
    "color",
    "light"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "GPIO",
     "role": "passive",
     "notes": "Sensor GPIO (sync / LED control). Leave unconnected"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x39"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "as7341",
    "ams",
    "spectral",
    "spectrometer",
    "color",
    "spettrometro",
    "colore",
    "luce"
   ],
   "sources": [
    {
     "title": "ams AS7341 datasheet",
     "section": "I2C address 0x39; 8 visible channels plus clear, NIR and flicker"
    },
    {
     "title": "ams AS7341 datasheet",
     "section": "ID register 0x92: only bits 7:2 are the ID, so it is not checked here"
    }
   ]
  },
  {
   "id": "at24c256-eeprom",
   "name": "AT24C256 I2C EEPROM module",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "WP",
     "role": "passive",
     "notes": "Write protect: LOW (default) allows writing"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x50",
    "0x51",
    "0x52",
    "0x53",
    "0x54",
    "0x55",
    "0x56",
    "0x57"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     30,
     20,
     5
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "at24c256",
    "at24c32",
    "eeprom",
    "memory",
    "storage",
    "memoria"
   ],
   "sources": [
    {
     "title": "Microchip AT24C256C datasheet",
     "section": "Device address 1010 A2 A1 A0 (0x50 to 0x57)"
    }
   ]
  },
  {
   "id": "atgm336h-gps",
   "name": "ATGM336H GPS/BeiDou module",
   "category": "sensor",
   "measures": [
    "position",
    "time"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "TXD",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud)"
    },
    {
     "name": "RXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "PPS",
     "role": "passive",
     "notes": "One pulse per second after a fix, optional"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     26,
     20,
     7
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "atgm336h",
    "gps",
    "beidou",
    "bds",
    "gnss",
    "posizione",
    "navigatore"
   ],
   "sources": [
    {
     "title": "Zhongke Microelectronics ATGM336H-5N datasheet",
     "section": "UART default 9600 baud, NMEA; GPS + BDS. Breakout pin order varies: check the silkscreen"
    }
   ]
  },
  {
   "id": "aw9523-expander",
   "name": "AW9523 16-bit I/O expander and LED driver",
   "category": "output",
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "2.5 to 5.5 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "RST",
     "role": "passive",
     "notes": "Reset, active LOW, pulled up. Leave unconnected"
    },
    {
     "name": "AD0",
     "role": "passive",
     "notes": "Address bit, default LOW"
    },
    {
     "name": "AD1",
     "role": "passive",
     "notes": "Address bit, default LOW"
    },
    {
     "name": "P0_0",
     "role": "passive",
     "notes": "Expander I/O: to your LEDs or buttons, not to the ESP32"
    },
    {
     "name": "P0_1",
     "role": "passive"
    },
    {
     "name": "P0_2",
     "role": "passive"
    },
    {
     "name": "P0_3",
     "role": "passive"
    },
    {
     "name": "P0_4",
     "role": "passive"
    },
    {
     "name": "P0_5",
     "role": "passive"
    },
    {
     "name": "P0_6",
     "role": "passive"
    },
    {
     "name": "P0_7",
     "role": "passive"
    },
    {
     "name": "P1_0",
     "role": "passive"
    },
    {
     "name": "P1_1",
     "role": "passive"
    },
    {
     "name": "P1_2",
     "role": "passive"
    },
    {
     "name": "P1_3",
     "role": "passive"
    },
    {
     "name": "P1_4",
     "role": "passive"
    },
    {
     "name": "P1_5",
     "role": "passive"
    },
    {
     "name": "P1_6",
     "role": "passive"
    },
    {
     "name": "P1_7",
     "role": "passive"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x58",
    "0x59",
    "0x5A",
    "0x5B"
   ],
   "idCheck": {
    "register": "0x10",
    "expect": "0x23"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     62,
     25.4,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "aw9523",
    "io expander",
    "led driver",
    "i2c expander",
    "gpio",
    "espansore"
   ],
   "sources": [
    {
     "title": "Awinic AW9523B datasheet",
     "section": "Address 10110 AD1 AD0 (0x58 to 0x5B); ID register 0x10 reads 0x23; constant-current LED mode"
    },
    {
     "title": "Adafruit AW9523 GPIO expander and LED driver guide",
     "section": "Pinouts. Check the silkscreen for the header order"
    }
   ]
  },
  {
   "id": "load-cell-bar",
   "name": "Bar load cell 1-20 kg (4 wires)",
   "category": "sensor",
   "measures": [
    "weight",
    "force"
   ],
   "pins": [
    {
     "name": "RED",
     "role": "passive",
     "notes": "Excitation + (E+ on the HX711). Never to the ESP32"
    },
    {
     "name": "BLACK",
     "role": "passive",
     "notes": "Excitation - (E- on the HX711)"
    },
    {
     "name": "WHITE",
     "role": "passive",
     "notes": "Signal - (A- on the HX711)"
    },
    {
     "name": "GREEN",
     "role": "passive",
     "notes": "Signal + (A+ on the HX711). Colours vary: if readings fall under load, swap A+ and A-"
    }
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     80,
     12.7,
     12.7
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "load cell",
    "bar load cell",
    "strain gauge",
    "scale",
    "cella di carico",
    "bilancia",
    "peso"
   ],
   "sources": [
    {
     "title": "Avia Semiconductor HX711 datasheet",
     "section": "Bridge input A+/A-, excitation E+/E-"
    },
    {
     "title": "Typical bar load cell seller datasheet",
     "section": "Full bridge, rated output about 1 mV/V"
    }
   ]
  },
  {
   "id": "bn-220-gps",
   "name": "Beitian BN-220 GPS module",
   "category": "sensor",
   "measures": [
    "position",
    "time"
   ],
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud by default)"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.0 to 5.5 V"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     22,
     20,
     6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "bn-220",
    "bn220",
    "beitian",
    "gps",
    "gnss",
    "drone",
    "posizione"
   ],
   "sources": [
    {
     "title": "Beitian BN-220 GPS module datasheet",
     "section": "Interface GND, TX, RX, VCC; supply 3.0 to 5.5 V; NMEA at 9600 baud. Wire colours vary: check the label"
    }
   ]
  },
  {
   "id": "tf-luna-i2c",
   "name": "Benewake TF-Luna LiDAR (I2C mode)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Pin 1. Needs 5 V: use VIN"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "Pin 2"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "Pin 3"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin 4"
    },
    {
     "name": "CFG",
     "role": "passive",
     "notes": "Pin 5. Tie to GND before power-up to select I2C"
    },
    {
     "name": "MUX",
     "role": "digital_out",
     "notes": "Pin 6, on/off output. Optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x10"
   ],
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     35,
     21,
     13
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "tf-luna",
    "benewake",
    "lidar",
    "i2c",
    "laser distance",
    "distance",
    "distanza"
   ],
   "sources": [
    {
     "title": "Benewake TF-Luna product manual",
     "section": "Pin 5 to GND selects I2C; default I2C address 0x10"
    },
    {
     "title": "Benewake TF-Luna product manual",
     "section": "Supply 3.7 to 5.2 V; I/O level LVTTL 3.3 V"
    }
   ]
  },
  {
   "id": "tf-luna",
   "name": "Benewake TF-Luna LiDAR (UART mode)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Pin 1. Needs 5 V: use VIN"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin 2. UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "Pin 3. UART: the part sends data here. Connect to an ESP32 RX pin (115200 baud, 3.3 V level)"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin 4"
    },
    {
     "name": "CFG",
     "role": "passive",
     "notes": "Pin 5, mode select. Leave unconnected for UART (GND at power-up = I2C)"
    },
    {
     "name": "MUX",
     "role": "digital_out",
     "notes": "Pin 6, on/off output. Optional"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     35,
     21,
     13
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "tf-luna",
    "benewake",
    "lidar",
    "laser distance",
    "distance",
    "distanza"
   ],
   "sources": [
    {
     "title": "Benewake TF-Luna product manual",
     "section": "Pins 1 +5V, 2 RXD/SDA, 3 TXD/SCL, 4 GND, 5 configuration, 6 multiplexing output"
    },
    {
     "title": "Benewake TF-Luna product manual",
     "section": "Supply 3.7 to 5.2 V; UART 115200 baud, LVTTL 3.3 V; range 0.2 to 8 m"
    }
   ]
  },
  {
   "id": "tfmini-s",
   "name": "Benewake TFmini-S LiDAR (UART)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Red wire. Needs 5 V: use VIN. Check the wire colours on your cable"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "Green wire. UART: the part sends data here. Connect to an ESP32 RX pin (115200 baud, 3.3 V level)"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "White wire. UART: the part receives data here. Connect to an ESP32 TX pin"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     42,
     15,
     16
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "tfmini-s",
    "tfmini",
    "benewake",
    "lidar",
    "laser distance",
    "distance",
    "distanza"
   ],
   "sources": [
    {
     "title": "Benewake TFmini-S product manual",
     "section": "Supply 5 V; UART 115200 baud, LVTTL 3.3 V; range 0.1 to 12 m"
    }
   ]
  },
  {
   "id": "bme680",
   "name": "BME680 gas + temperature + humidity + pressure",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity",
    "pressure",
    "gas"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "Address select: LOW = 0x76, HIGH = 0x77"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "Leave HIGH or unconnected for I2C"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x76",
    "0x77"
   ],
   "idCheck": {
    "register": "0xD0",
    "expect": "0x61"
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     16.2,
     13,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "bme680",
    "gas",
    "air quality",
    "voc",
    "humidity",
    "pressure",
    "bosch",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Bosch BME680 datasheet",
     "section": "Register 0xD0 chip_id (reads 0x61)"
    },
    {
     "title": "Bosch BME680 datasheet",
     "section": "I2C interface: SDO pin selects address 0x76 / 0x77"
    }
   ]
  },
  {
   "id": "bme688",
   "name": "BME688 gas + temperature + humidity + pressure",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity",
    "pressure",
    "gas"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCK",
     "role": "i2c_scl",
     "notes": "I2C SCL (SPI SCK)"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "I2C address select: LOW = 0x76, HIGH or open = 0x77"
    },
    {
     "name": "SDI",
     "role": "i2c_sda",
     "notes": "I2C SDA (SPI SDI)"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "Leave HIGH or unconnected for I2C"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x77",
    "0x76"
   ],
   "idCheck": {
    "register": "0xD0",
    "expect": "0x61"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "bme688",
    "bme680",
    "bosch",
    "gas",
    "voc",
    "air quality",
    "qualità aria",
    "pressione"
   ],
   "sources": [
    {
     "title": "Bosch BME688 datasheet",
     "section": "Register 0xD0 chip_id reads 0x61, same as BME680; register 0xF0 variant_id = 0x01 tells them apart"
    },
    {
     "title": "Bosch BME688 datasheet",
     "section": "I2C address 0x76 (SDO = GND) or 0x77 (SDO = VDDIO)"
    },
    {
     "title": "Adafruit BME688 guide",
     "section": "Pinout VIN, 3Vo, GND, SCK, SDO, SDI, CS"
    }
   ]
  },
  {
   "id": "bmi160",
   "name": "BMI160 (GY-BMI160) accelerometer + gyro",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "Goes through the on-board regulator. Pin order differs between sellers"
    },
    {
     "name": "3V3",
     "role": "passive",
     "notes": "Regulator output. Leave unconnected when you power VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "SPI chip select. Leave unconnected or HIGH for I2C"
    },
    {
     "name": "SAO",
     "role": "passive",
     "notes": "Address select (SDO): LOW = 0x68, HIGH = 0x69"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x68",
    "0x69"
   ],
   "idCheck": {
    "register": "0x00",
    "expect": "0xd1"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20,
     13,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "bmi160",
    "gy-bmi160",
    "bosch",
    "imu",
    "accelerometer",
    "gyro",
    "giroscopio"
   ],
   "sources": [
    {
     "title": "Bosch BMI160 datasheet",
     "section": "Register 0x00 CHIP_ID (reads 0xD1)"
    },
    {
     "title": "Bosch BMI160 datasheet",
     "section": "I2C address 0x68 (SDO to GND) / 0x69 (SDO to VDDIO)"
    }
   ]
  },
  {
   "id": "bmm150",
   "name": "BMM150 (GY-BMM150) 3-axis magnetometer",
   "category": "sensor",
   "measures": [
    "magnetic field",
    "heading"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3. Pin order differs between sellers: check the silkscreen"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "CSB",
     "role": "passive",
     "notes": "Address bit / SPI select. Sets the address with SDO (0x10 to 0x13)"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "Address bit. Sets the address with CSB (0x10 to 0x13)"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "DRDY",
     "role": "int",
     "notes": "Data ready, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x10",
    "0x11",
    "0x12",
    "0x13"
   ],
   "voltage": "3.3",
   "model": {
    "shape": "breakout",
    "size": [
     21.3,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "bmm150",
    "bosch",
    "magnetometer",
    "compass",
    "bussola",
    "magnetometro"
   ],
   "sources": [
    {
     "title": "Bosch BMM150 datasheet",
     "section": "Register 0x40 chip ID reads 0x32 only after the power control bit (0x4B bit 0) is set"
    },
    {
     "title": "Bosch BMM150 datasheet",
     "section": "I2C address 0x10 to 0x13 selected by CSB and SDO"
    }
   ]
  },
  {
   "id": "bmp388",
   "name": "BMP388 barometric pressure",
   "category": "sensor",
   "measures": [
    "pressure",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCK",
     "role": "i2c_scl",
     "notes": "I2C SCL (SPI SCK)"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "I2C address select: LOW = 0x76, HIGH or open = 0x77"
    },
    {
     "name": "SDI",
     "role": "i2c_sda",
     "notes": "I2C SDA (SPI SDI)"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "Leave HIGH or unconnected for I2C"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x77",
    "0x76"
   ],
   "idCheck": {
    "register": "0x00",
    "expect": "0x50"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     21.4,
     17.8,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "bmp388",
    "bosch",
    "barometer",
    "pressure",
    "altitude",
    "pressione",
    "altitudine"
   ],
   "sources": [
    {
     "title": "Bosch BMP388 datasheet",
     "section": "Register 0x00 CHIP_ID (reads 0x50)"
    },
    {
     "title": "Bosch BMP388 datasheet",
     "section": "I2C address 0x76 (SDO = GND) or 0x77 (SDO = VDDIO)"
    },
    {
     "title": "Adafruit BMP388 guide",
     "section": "Pinout VIN, 3Vo, GND, SCK, SDO, SDI, CS, INT"
    }
   ]
  },
  {
   "id": "bmp390",
   "name": "BMP390 barometric pressure",
   "category": "sensor",
   "measures": [
    "pressure",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCK",
     "role": "i2c_scl",
     "notes": "I2C SCL (SPI SCK)"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "I2C address select: LOW = 0x76, HIGH or open = 0x77"
    },
    {
     "name": "SDI",
     "role": "i2c_sda",
     "notes": "I2C SDA (SPI SDI)"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "Leave HIGH or unconnected for I2C"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x77",
    "0x76"
   ],
   "idCheck": {
    "register": "0x00",
    "expect": "0x60"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     21.4,
     17.8,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "bmp390",
    "bosch",
    "barometer",
    "pressure",
    "altitude",
    "pressione",
    "altitudine"
   ],
   "sources": [
    {
     "title": "Bosch BMP390 datasheet",
     "section": "Register 0x00 CHIP_ID (reads 0x60; a BMP388 reads 0x50)"
    },
    {
     "title": "Bosch BMP390 datasheet",
     "section": "I2C address 0x76 (SDO = GND) or 0x77 (SDO = VDDIO)"
    },
    {
     "title": "Adafruit BMP390 guide",
     "section": "Pinout VIN, 3Vo, GND, SCK, SDO, SDI, CS, INT"
    }
   ]
  },
  {
   "id": "bno055",
   "name": "BNO055 absolute orientation sensor",
   "category": "sensor",
   "measures": [
    "orientation",
    "acceleration",
    "rotation",
    "magnetic field"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "Output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW. Optional"
    },
    {
     "name": "INT",
     "role": "int"
    },
    {
     "name": "ADR",
     "role": "passive",
     "notes": "Address select: LOW = 0x28, HIGH = 0x29"
    },
    {
     "name": "PS0",
     "role": "passive",
     "notes": "Protocol select. Leave LOW for I2C"
    },
    {
     "name": "PS1",
     "role": "passive",
     "notes": "Protocol select. Leave LOW for I2C"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x28",
    "0x29"
   ],
   "idCheck": {
    "register": "0x00",
    "expect": "0xA0"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     26.7,
     20.3,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "bno055",
    "bosch",
    "imu",
    "orientation",
    "euler",
    "fusion",
    "orientamento"
   ],
   "sources": [
    {
     "title": "Bosch BNO055 datasheet",
     "section": "Register 0x00 CHIP_ID (reads 0xA0)"
    },
    {
     "title": "Bosch BNO055 datasheet",
     "section": "I2C address 0x28 (COM3 LOW) / 0x29 (COM3 HIGH)"
    }
   ]
  },
  {
   "id": "bno085",
   "name": "BNO085 / BNO08x 9-axis orientation sensor",
   "category": "sensor",
   "measures": [
    "orientation",
    "acceleration",
    "rotation",
    "magnetic field"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "Adafruit-style pin order. Other BNO08x boards differ: check the silkscreen"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "Output of the on-board 3.3 V regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "LOW when the sensor has data. Recommended"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW. Recommended"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "SPI chip select. Leave unconnected or HIGH for I2C"
    },
    {
     "name": "DI",
     "role": "passive",
     "notes": "SPI data in / address select in I2C mode. Leave unconnected for 0x4A"
    },
    {
     "name": "P0",
     "role": "passive",
     "notes": "Protocol select. Leave LOW for I2C"
    },
    {
     "name": "P1",
     "role": "passive",
     "notes": "Protocol select. Leave LOW for I2C"
    },
    {
     "name": "BT",
     "role": "passive",
     "notes": "Boot pin. Leave unconnected"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x4A",
    "0x4B"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     31.5,
     20.3,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "bno085",
    "bno08x",
    "bno080",
    "imu",
    "orientation",
    "fusion",
    "quaternion",
    "orientamento"
   ],
   "sources": [
    {
     "title": "CEVA / Hillcrest BNO08X datasheet",
     "section": "I2C address 0x4A (SA0 LOW) / 0x4B (SA0 HIGH); SHTP protocol, no simple ID register"
    },
    {
     "title": "CEVA / Hillcrest BNO08X datasheet",
     "section": "Host interface select with PS0/PS1"
    }
   ]
  },
  {
   "id": "bts7960-driver",
   "name": "BTS7960 43 A motor driver (IBT-2)",
   "category": "output",
   "pins": [
    {
     "name": "RPWM",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Forward PWM"
    },
    {
     "name": "LPWM",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reverse PWM"
    },
    {
     "name": "R_EN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "HIGH to enable. Often tied to L_EN"
    },
    {
     "name": "L_EN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "HIGH to enable"
    },
    {
     "name": "R_IS",
     "role": "analog_out",
     "notes": "Current sense. Can exceed 3.3 V on a fault: add a divider before an ADC pin"
    },
    {
     "name": "L_IS",
     "role": "analog_out",
     "notes": "Current sense. Can exceed 3.3 V on a fault: add a divider before an ADC pin"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "5 V logic supply: use VIN. Inputs via a 74HC244 buffer: 3.3 V is below spec, often works"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "B+",
     "role": "passive",
     "notes": "Motor supply + 6 to 27 V (screw terminal)"
    },
    {
     "name": "B-",
     "role": "passive",
     "notes": "Motor supply - (screw terminal)"
    },
    {
     "name": "M+",
     "role": "passive",
     "notes": "Motor"
    },
    {
     "name": "M-",
     "role": "passive",
     "notes": "Motor"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     50,
     50,
     40
    ],
    "color": "#B22222"
   },
   "keywords": [
    "bts7960",
    "ibt-2",
    "ibt_2",
    "motor driver",
    "high current",
    "43a",
    "driver motore"
   ],
   "sources": [
    {
     "title": "Infineon BTS7960 datasheet",
     "section": "Supply 5.5 to 27.5 V; IS current sense output"
    }
   ]
  },
  {
   "id": "key-switch-ky004",
   "name": "Button module (KY-004)",
   "category": "input",
   "pins": [
    {
     "name": "S",
     "role": "digital_out",
     "notes": "Signal: to a GPIO. Use INPUT_PULLUP too"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Middle pin"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked - on the board"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     18.5,
     15,
     8
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ky-004",
    "button module",
    "key switch",
    "push button",
    "pulsante",
    "sensor kit"
   ],
   "sources": [
    {
     "title": "Joy-IT SensorKit X40 KY-004 key switch module",
     "section": "Pins signal, +V, GND; 10 kΩ resistor on the board"
    }
   ]
  },
  {
   "id": "soil-moisture-capacitive",
   "name": "Capacitive soil moisture sensor v1.2",
   "category": "sensor",
   "measures": [
    "soil moisture"
   ],
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "AOUT",
     "role": "analog_out",
     "notes": "Lower voltage means wetter soil. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     23,
     80,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "soil moisture",
    "capacitive",
    "plant",
    "garden",
    "umidità terreno",
    "terreno",
    "piante"
   ],
   "sources": [
    {
     "title": "DFRobot SEN0193 capacitive soil moisture sensor wiki",
     "section": "Supply 3.3 to 5.5 V, analog output 0 to 3.0 V"
    }
   ]
  },
  {
   "id": "cc1101",
   "name": "CC1101 sub-GHz radio module",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V only. Never 5 V"
    },
    {
     "name": "GDO0",
     "role": "int",
     "notes": "Configurable output (packet received / sent)"
    },
    {
     "name": "CSN",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "MISO",
     "role": "spi_miso",
     "notes": "Also GDO1"
    },
    {
     "name": "GDO2",
     "role": "int",
     "notes": "Configurable output, optional"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     34,
     15,
     3
    ],
    "color": "#1E7B3A"
   },
   "keywords": [
    "cc1101",
    "sub-ghz",
    "433 mhz",
    "868 mhz",
    "radio",
    "transceiver",
    "ricetrasmettitore"
   ],
   "sources": [
    {
     "title": "Texas Instruments CC1101 datasheet",
     "section": "4-wire SPI interface; GDO0 and GDO2 configurable outputs; supply 1.8 to 3.6 V"
    },
    {
     "title": "Common 8-pin CC1101 module pinout",
     "section": "GND, VCC, GDO0, CSN, SCK, MOSI, MISO/GDO1, GDO2. Order differs between boards: check the silkscreen"
    }
   ]
  },
  {
   "id": "ccs811",
   "name": "CCS811 eCO2 + TVOC (CJMCU-811)",
   "category": "sensor",
   "measures": [
    "eco2",
    "tvoc"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "WAK",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Wake, active LOW. Tie to GND to keep it awake"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW. Optional"
    },
    {
     "name": "ADD",
     "role": "passive",
     "notes": "Address select: LOW = 0x5A, HIGH = 0x5B"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x5A",
    "0x5B"
   ],
   "idCheck": {
    "register": "0x20",
    "expect": "0x81"
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     21.3,
     15,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ccs811",
    "cjmcu-811",
    "eco2",
    "tvoc",
    "air quality",
    "qualità aria",
    "voc"
   ],
   "sources": [
    {
     "title": "ams CCS811 datasheet",
     "section": "Register 0x20 HW_ID (reads 0x81)"
    },
    {
     "title": "ams CCS811 datasheet",
     "section": "I2C address 0x5A (ADDR LOW) / 0x5B (ADDR HIGH)"
    }
   ]
  },
  {
   "id": "cd74hc4067-mux",
   "name": "CD74HC4067 16-channel analog multiplexer",
   "category": "output",
   "pins": [
    {
     "name": "SIG",
     "role": "analog_out",
     "notes": "Common signal: to an ADC1 pin (GPIO 32 to 39)"
    },
    {
     "name": "S3",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Channel select bit 3"
    },
    {
     "name": "S2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Channel select bit 2"
    },
    {
     "name": "S1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Channel select bit 1"
    },
    {
     "name": "S0",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Channel select bit 0"
    },
    {
     "name": "EN",
     "role": "passive",
     "notes": "Enable, active LOW. Tie to GND"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3.3 V so no channel goes above 3.3 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "C0",
     "role": "passive",
     "notes": "Channel 0: to a sensor or button, not to the ESP32"
    },
    {
     "name": "C1",
     "role": "passive"
    },
    {
     "name": "C2",
     "role": "passive"
    },
    {
     "name": "C3",
     "role": "passive"
    },
    {
     "name": "C4",
     "role": "passive"
    },
    {
     "name": "C5",
     "role": "passive"
    },
    {
     "name": "C6",
     "role": "passive"
    },
    {
     "name": "C7",
     "role": "passive"
    },
    {
     "name": "C8",
     "role": "passive"
    },
    {
     "name": "C9",
     "role": "passive"
    },
    {
     "name": "C10",
     "role": "passive"
    },
    {
     "name": "C11",
     "role": "passive"
    },
    {
     "name": "C12",
     "role": "passive"
    },
    {
     "name": "C13",
     "role": "passive"
    },
    {
     "name": "C14",
     "role": "passive"
    },
    {
     "name": "C15",
     "role": "passive"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "breakout",
    "size": [
     62,
     18,
     1.6
    ],
    "color": "#B22222"
   },
   "keywords": [
    "cd74hc4067",
    "74hc4067",
    "multiplexer",
    "analog mux",
    "16 channel",
    "more adc",
    "multiplexer analogico"
   ],
   "sources": [
    {
     "title": "Texas Instruments CD74HC4067 datasheet",
     "section": "Truth table S0 to S3 and E; supply 2 to 6 V"
    },
    {
     "title": "SparkFun Analog/Digital MUX breakout (BOB-09056)",
     "section": "Header SIG, S3, S2, S1, S0, EN, VCC, GND and C0 to C15"
    }
   ]
  },
  {
   "id": "cp2102-usb-uart",
   "name": "CP2102 USB to UART adapter",
   "category": "output",
   "pins": [
    {
     "name": "DTR",
     "role": "digital_out",
     "notes": "Control line for auto-reset, optional"
    },
    {
     "name": "RXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "The adapter receives here. Connect to an ESP32 TX pin"
    },
    {
     "name": "TXD",
     "role": "digital_out",
     "notes": "The adapter sends here. Connect to an ESP32 RX pin"
    },
    {
     "name": "5V",
     "role": "passive",
     "notes": "5 V output from USB. Do not connect when the ESP32 is on USB too"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "3V3",
     "role": "passive",
     "notes": "3.3 V output from the CP2102 regulator (about 100 mA max)"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     25,
     16,
     5
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "cp2102",
    "usb uart",
    "usb serial",
    "ttl adapter",
    "ftdi",
    "ch340",
    "adattatore usb"
   ],
   "sources": [
    {
     "title": "Silicon Labs CP2102/9 datasheet",
     "section": "UART signals at 3.3 V; internal 3.3 V regulator, 100 mA"
    },
    {
     "title": "Common CP2102 adapter boards",
     "section": "Pin order and labels vary (some add RST or CTS): check the silkscreen"
    }
   ]
  },
  {
   "id": "anemometer",
   "name": "Cup anemometer (reed switch)",
   "category": "sensor",
   "measures": [
    "wind speed"
   ],
   "pins": [
    {
     "name": "1",
     "role": "digital_out",
     "notes": "To a GPIO with INPUT_PULLUP. 1 closure per second = 2.4 km/h"
    },
    {
     "name": "2",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     80,
     80,
     40
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "anemometer",
    "wind speed",
    "weather station",
    "anemometro",
    "vento",
    "meteo"
   ],
   "sources": [
    {
     "title": "SparkFun Weather Meter Kit datasheet (SEN-15901)",
     "section": "Anemometer: reed switch, one closure per second = 2.4 km/h (1.492 mph)"
    }
   ]
  },
  {
   "id": "dc-motor",
   "name": "DC motor (small, 3-6 V)",
   "category": "output",
   "pins": [
    {
     "name": "M+",
     "role": "passive",
     "notes": "Never connect to an ESP32 pin: use a motor driver or a transistor"
    },
    {
     "name": "M-",
     "role": "passive",
     "notes": "Swap the wires to reverse the direction"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "motor",
    "size": [
     20,
     15,
     25
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "dc motor",
    "motor",
    "tt motor",
    "gear motor",
    "motore",
    "motore dc"
   ],
   "sources": [
    {
     "title": "Espressif ESP32 datasheet",
     "section": "GPIO drive strength is far too low for a motor (about 40 mA max)"
    }
   ]
  },
  {
   "id": "dfplayer-mini",
   "name": "DFPlayer Mini MP3 player",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.2 to 5 V"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin through a 1 kΩ resistor"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud)"
    },
    {
     "name": "DAC_R",
     "role": "passive",
     "notes": "Line out right"
    },
    {
     "name": "DAC_L",
     "role": "passive",
     "notes": "Line out left"
    },
    {
     "name": "SPK_1",
     "role": "passive",
     "notes": "Speaker + (3 W max)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SPK_2",
     "role": "passive",
     "notes": "Speaker -"
    },
    {
     "name": "IO_1",
     "role": "passive"
    },
    {
     "name": "GND2",
     "role": "ground"
    },
    {
     "name": "IO_2",
     "role": "passive"
    },
    {
     "name": "ADKEY_1",
     "role": "passive"
    },
    {
     "name": "ADKEY_2",
     "role": "passive"
    },
    {
     "name": "USB+",
     "role": "passive"
    },
    {
     "name": "USB-",
     "role": "passive"
    },
    {
     "name": "BUSY",
     "role": "digital_out",
     "notes": "LOW while playing"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     41.6,
     20.5,
     8
    ],
    "color": "#B22222"
   },
   "keywords": [
    "dfplayer",
    "mp3",
    "audio",
    "sound",
    "speaker",
    "lettore mp3",
    "musica"
   ],
   "sources": [
    {
     "title": "DFRobot DFPlayer Mini manual",
     "section": "Pin map 1 VCC to 16 BUSY; UART 9600 baud"
    }
   ]
  },
  {
   "id": "dht11",
   "name": "DHT11 temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "DATA",
     "role": "onewire",
     "notes": "Needs a 10 kΩ pull-up (already on 3-pin modules; 3-pin module order varies, read the labels)"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Not connected"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "onewire",
   "voltage": "3.3-5",
   "model": {
    "shape": "dht",
    "size": [
     12,
     16,
     5.5
    ],
    "color": "#2E7FD8"
   },
   "keywords": [
    "dht11",
    "dht",
    "humidity",
    "temperature",
    "umidità",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Aosong DHT11 datasheet",
     "section": "Pin 1 VDD, 2 DATA, 3 NC, 4 GND; 5 kΩ to 10 kΩ pull-up on DATA"
    },
    {
     "title": "Aosong DHT11 datasheet",
     "section": "Supply 3 to 5.5 V"
    }
   ]
  },
  {
   "id": "dht20",
   "name": "DHT20 temperature + humidity (I2C)",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power",
     "notes": "Pin 1 (left, grille facing you)"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "Needs a pull-up to 3.3 V (about 4.7 kΩ); the bare sensor has none"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "Needs a pull-up to 3.3 V (about 4.7 kΩ); the bare sensor has none"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x38"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "dht",
    "size": [
     12,
     15.5,
     5.5
    ],
    "color": "#2E6FD8"
   },
   "keywords": [
    "dht20",
    "aht20",
    "aosong",
    "humidity",
    "temperature",
    "umidità",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Aosong DHT20 datasheet",
     "section": "Pin 1 VDD, 2 SDA, 3 GND, 4 SCL; supply 2.2 to 5.5 V"
    },
    {
     "title": "Aosong DHT20 datasheet",
     "section": "I2C address 0x38 (same as AHT20; the two cannot share a bus)"
    }
   ]
  },
  {
   "id": "dht22",
   "name": "DHT22 (AM2302) temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "DATA",
     "role": "onewire",
     "needsOutput": true,
     "notes": "Needs a 10 kΩ pull-up (included on 3-pin modules)"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "onewire",
   "voltage": "3.3-5",
   "model": {
    "shape": "dht",
    "size": [
     15,
     25,
     7.7
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "dht22",
    "am2302",
    "dht",
    "humidity",
    "temperature"
   ],
   "sources": [
    {
     "title": "Aosong AM2302 datasheet",
     "section": "Single-bus communication; pull-up resistor on DATA"
    }
   ],
   "starterSketch": "dht22"
  },
  {
   "id": "dps310",
   "name": "DPS310 barometric pressure",
   "category": "sensor",
   "measures": [
    "pressure",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCK",
     "role": "i2c_scl",
     "notes": "I2C SCL (SPI SCK)"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "I2C address select: LOW = 0x76, HIGH or open = 0x77"
    },
    {
     "name": "SDI",
     "role": "i2c_sda",
     "notes": "I2C SDA (SPI SDI)"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "Leave HIGH or unconnected for I2C"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x77",
    "0x76"
   ],
   "idCheck": {
    "register": "0x0D",
    "expect": "0x10"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "dps310",
    "infineon",
    "barometer",
    "pressure",
    "altitude",
    "pressione",
    "altitudine"
   ],
   "sources": [
    {
     "title": "Infineon DPS310 datasheet",
     "section": "Register map: 0x0D Product and Revision ID (reads 0x10)"
    },
    {
     "title": "Infineon DPS310 datasheet",
     "section": "I2C address 0x77 (SDO HIGH) or 0x76 (SDO LOW)"
    },
    {
     "title": "Adafruit DPS310 guide",
     "section": "Pinout VIN, 3Vo, GND, SCK, SDO, SDI, CS"
    }
   ]
  },
  {
   "id": "drv2605l-haptic",
   "name": "DRV2605L haptic motor driver (I2C)",
   "category": "output",
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "3.3 V or 5 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "IN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Optional trigger or PWM / analog input"
    },
    {
     "name": "MOTOR+",
     "role": "passive",
     "notes": "Vibration motor (ERM) or LRA +"
    },
    {
     "name": "MOTOR-",
     "role": "passive",
     "notes": "Vibration motor (ERM) or LRA -"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x5A"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20,
     18,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "drv2605l",
    "drv2605",
    "haptic",
    "vibration",
    "erm",
    "lra",
    "vibrazione"
   ],
   "sources": [
    {
     "title": "Texas Instruments DRV2605L datasheet",
     "section": "I2C address 0x5A; supply 2 to 5.2 V; built-in effect library"
    },
    {
     "title": "Adafruit DRV2605L Haptic Controller guide",
     "section": "Pinouts"
    }
   ]
  },
  {
   "id": "drv8825-driver",
   "name": "DRV8825 stepper driver",
   "category": "output",
   "pins": [
    {
     "name": "EN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Enable, active LOW. Leave unconnected to keep it on"
    },
    {
     "name": "M0",
     "role": "passive",
     "notes": "Microstep select"
    },
    {
     "name": "M1",
     "role": "passive",
     "notes": "Microstep select"
    },
    {
     "name": "M2",
     "role": "passive",
     "notes": "Microstep select"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Must be HIGH: tie RST and SLP to 3V3"
    },
    {
     "name": "SLP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Must be HIGH: tie RST and SLP to 3V3"
    },
    {
     "name": "STEP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "One pulse = one step"
    },
    {
     "name": "DIR",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Direction"
    },
    {
     "name": "VMOT",
     "role": "passive",
     "notes": "Motor supply 8.2 to 45 V from a separate supply. Add a 100 µF capacitor"
    },
    {
     "name": "GND_MOT",
     "role": "ground",
     "notes": "Motor supply ground"
    },
    {
     "name": "B2",
     "role": "passive",
     "notes": "Motor coil B"
    },
    {
     "name": "B1",
     "role": "passive",
     "notes": "Motor coil B"
    },
    {
     "name": "A1",
     "role": "passive",
     "notes": "Motor coil A"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Motor coil A"
    },
    {
     "name": "FAULT",
     "role": "digital_out",
     "notes": "LOW on over-current or over-temperature"
    },
    {
     "name": "GND_LOGIC",
     "role": "ground",
     "notes": "Logic ground: to the ESP32 GND"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     41.6,
     15.2,
     10
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "drv8825",
    "stepper driver",
    "pololu",
    "nema17",
    "driver passo passo"
   ],
   "sources": [
    {
     "title": "Texas Instruments DRV8825 datasheet",
     "section": "Motor supply 8.2 to 45 V; logic inputs 3.3 V / 5 V compatible"
    },
    {
     "title": "Pololu DRV8825 stepper driver carrier",
     "section": "Pinout"
    }
   ]
  },
  {
   "id": "drv8833-driver",
   "name": "DRV8833 dual motor driver",
   "category": "output",
   "pins": [
    {
     "name": "AIN1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin order varies between boards: match by the printed label. Motor A. PWM on one input, the other LOW"
    },
    {
     "name": "AIN2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor A"
    },
    {
     "name": "BIN1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B"
    },
    {
     "name": "BIN2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B"
    },
    {
     "name": "NSLEEP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "HIGH = driver on. Pulled up on some boards, not on others"
    },
    {
     "name": "NFAULT",
     "role": "digital_out",
     "notes": "Open drain, LOW on over-current or over-heat. Needs a pull-up"
    },
    {
     "name": "VM",
     "role": "passive",
     "notes": "Motor supply 2.7 to 10.8 V"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Share it with the motor supply and the ESP32 GND"
    },
    {
     "name": "AOUT1",
     "role": "passive",
     "notes": "Motor A"
    },
    {
     "name": "AOUT2",
     "role": "passive",
     "notes": "Motor A"
    },
    {
     "name": "BOUT1",
     "role": "passive",
     "notes": "Motor B"
    },
    {
     "name": "BOUT2",
     "role": "passive",
     "notes": "Motor B"
    }
   ],
   "bus": "gpio",
   "voltage": "2.7-10.8",
   "model": {
    "shape": "module",
    "size": [
     31.5,
     18,
     3
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "drv8833",
    "motor driver",
    "h-bridge",
    "dc motor",
    "driver motore",
    "ponte h"
   ],
   "sources": [
    {
     "title": "Texas Instruments DRV8833 datasheet",
     "section": "VM 2.7 to 10.8 V; 1.5 A RMS per bridge; nSLEEP, nFAULT"
    }
   ]
  },
  {
   "id": "drv8871-driver",
   "name": "DRV8871 single motor driver (3.6 A)",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin order varies between boards: match by the printed label. Share it with the motor supply and the ESP32 GND"
    },
    {
     "name": "IN2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Direction / PWM"
    },
    {
     "name": "IN1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Direction / PWM"
    },
    {
     "name": "VM",
     "role": "passive",
     "notes": "Motor supply 6.5 to 45 V from a separate supply (screw terminal)"
    },
    {
     "name": "OUT1",
     "role": "passive",
     "notes": "Motor"
    },
    {
     "name": "OUT2",
     "role": "passive",
     "notes": "Motor"
    }
   ],
   "bus": "gpio",
   "voltage": "6.5-45",
   "model": {
    "shape": "module",
    "size": [
     25,
     20,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "drv8871",
    "motor driver",
    "h-bridge",
    "dc motor",
    "adafruit",
    "driver motore"
   ],
   "sources": [
    {
     "title": "Texas Instruments DRV8871 datasheet",
     "section": "VM 6.5 to 45 V; 3.6 A peak; current limit set by ILIM resistor"
    }
   ]
  },
  {
   "id": "ds1302-rtc",
   "name": "DS1302 real-time clock module",
   "category": "sensor",
   "measures": [
    "time"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CLK",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Serial clock. This is a 3-wire bus, not I2C"
    },
    {
     "name": "DAT",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data, both directions"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Chip enable (CE): HIGH during a transfer"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     44,
     23,
     14
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ds1302",
    "rtc",
    "real time clock",
    "3-wire",
    "clock",
    "orologio",
    "ora"
   ],
   "sources": [
    {
     "title": "Maxim DS1302 datasheet",
     "section": "3-wire interface (CE, I/O, SCLK); supply 2.0 to 5.5 V"
    }
   ]
  },
  {
   "id": "ds1307-rtc",
   "name": "DS1307 real-time clock (Tiny RTC)",
   "category": "sensor",
   "measures": [
    "time"
   ],
   "pins": [
    {
     "name": "SQ",
     "role": "passive",
     "notes": "Square wave output. Leave unconnected"
    },
    {
     "name": "DS",
     "role": "passive",
     "notes": "Optional DS18B20 footprint. Leave unconnected"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "Pulled up to 5 V on the board: remove the pull-ups or use a level shifter"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "Pulled up to 5 V on the board: remove the pull-ups or use a level shifter"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "BAT",
     "role": "passive",
     "notes": "Battery voltage. Leave unconnected"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x68",
    "0x50"
   ],
   "voltage": "5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     27,
     28,
     10
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ds1307",
    "rtc",
    "tiny rtc",
    "real time clock",
    "clock",
    "orologio"
   ],
   "sources": [
    {
     "title": "Maxim DS1307 datasheet",
     "section": "I2C address 0x68; supply 4.5 to 5.5 V"
    },
    {
     "title": "Microchip AT24C32 datasheet",
     "section": "EEPROM on the Tiny RTC board at 0x50"
    }
   ]
  },
  {
   "id": "ds18b20-module",
   "name": "DS18B20 module (KY-001 style)",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "S",
     "role": "onewire",
     "notes": "Data. The 4.7 kΩ pull-up is on the module"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Middle pin, marked + on some boards"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked - on the board"
    }
   ],
   "bus": "onewire",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     18,
     15,
     8
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ds18b20",
    "ky-001",
    "onewire",
    "temperature",
    "module",
    "modulo",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Maxim DS18B20 datasheet",
     "section": "Pin description and 1-Wire pull-up"
    }
   ]
  },
  {
   "id": "ds18b20-to92",
   "name": "DS18B20 temperature sensor (TO-92)",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Left leg, flat side facing you"
    },
    {
     "name": "DQ",
     "role": "onewire",
     "notes": "Middle leg. Needs a 4.7 kΩ pull-up to 3.3 V"
    },
    {
     "name": "VDD",
     "role": "power",
     "notes": "Right leg"
    }
   ],
   "bus": "onewire",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     8.6,
     4.2,
     5.2
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ds18b20",
    "onewire",
    "to-92",
    "temperature",
    "dallas",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Maxim DS18B20 datasheet",
     "section": "TO-92 pin configuration (bottom view): 1 GND, 2 DQ, 3 VDD"
    }
   ]
  },
  {
   "id": "ds18b20-probe",
   "name": "DS18B20 waterproof temperature probe",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power",
     "notes": "Red wire"
    },
    {
     "name": "DQ",
     "role": "onewire",
     "notes": "Yellow (sometimes white) wire. Needs a 4.7 kΩ pull-up to 3.3 V"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    }
   ],
   "bus": "onewire",
   "voltage": "3.3-5",
   "model": {
    "shape": "dht",
    "size": [
     8.6,
     50,
     6
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "ds18b20",
    "onewire",
    "probe",
    "waterproof",
    "temperature",
    "dallas",
    "sonda",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Maxim DS18B20 datasheet",
     "section": "Pin description: GND, DQ, VDD; DQ needs a pull-up of about 4.7 kΩ"
    },
    {
     "title": "Maxim DS18B20 datasheet",
     "section": "Supply 3.0 to 5.5 V"
    }
   ]
  },
  {
   "id": "servo-ds3218",
   "name": "DS3218 20 kg metal gear servo",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black or brown wire. Also connect to the ESP32 GND"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire. 5 to 6.8 V from a separate supply rated 3 A or more, not the ESP32"
    },
    {
     "name": "SIG",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "White or orange wire. 50 Hz PWM, 0.5 to 2.5 ms"
    }
   ],
   "bus": "gpio",
   "voltage": "5-6.8",
   "model": {
    "shape": "motor",
    "size": [
     40,
     20,
     40
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ds3218",
    "servo",
    "20kg",
    "high torque",
    "metal gear",
    "servomotore"
   ],
   "sources": [
    {
     "title": "DSServo DS3218 datasheet",
     "section": "Supply 4.8 to 6.8 V; pulse 500 to 2500 µs"
    }
   ]
  },
  {
   "id": "ds3231-rtc",
   "name": "DS3231 real-time clock (ZS-042)",
   "category": "sensor",
   "measures": [
    "time",
    "temperature"
   ],
   "pins": [
    {
     "name": "32K",
     "role": "passive",
     "notes": "32 kHz output. Leave unconnected"
    },
    {
     "name": "SQW",
     "role": "int",
     "notes": "Square wave / alarm output (open drain)"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x68",
    "0x57"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     38,
     22,
     14
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ds3231",
    "rtc",
    "real time clock",
    "zs-042",
    "clock",
    "orologio",
    "ora"
   ],
   "sources": [
    {
     "title": "Maxim DS3231 datasheet",
     "section": "I2C address 0x68 (1101000)"
    },
    {
     "title": "Microchip AT24C32 datasheet",
     "section": "EEPROM on the ZS-042 board at 0x57 (A0-A2 pulled up)"
    }
   ]
  },
  {
   "id": "epaper-154",
   "name": "E-paper 1.54\" 200x200 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V. Newer boards add a 9th pin PWR: tie it to 3V3 or drive it HIGH"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI)"
    },
    {
     "name": "CLK",
     "role": "spi_sck",
     "notes": "SPI clock"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "BUSY",
     "role": "digital_out",
     "notes": "Tells when the screen is refreshing. Wait for it before sending more"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "oled",
    "size": [
     48,
     33,
     4
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "e-paper",
    "e-ink",
    "epaper",
    "1.54",
    "200x200",
    "waveshare",
    "carta elettronica"
   ],
   "sources": [
    {
     "title": "Waveshare 1.54inch e-Paper Module user manual",
     "section": "Pins VCC, GND, DIN, CLK, CS, DC, RST, BUSY"
    }
   ]
  },
  {
   "id": "epaper-213",
   "name": "E-paper 2.13\" 250x122 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V. Newer boards add a 9th pin PWR: tie it to 3V3 or drive it HIGH"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI)"
    },
    {
     "name": "CLK",
     "role": "spi_sck",
     "notes": "SPI clock"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "BUSY",
     "role": "digital_out",
     "notes": "Tells when the screen is refreshing. Wait for it before sending more"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "oled",
    "size": [
     65,
     30,
     4
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "e-paper",
    "e-ink",
    "epaper",
    "2.13",
    "250x122",
    "waveshare",
    "carta elettronica"
   ],
   "sources": [
    {
     "title": "Waveshare 2.13inch e-Paper Module user manual",
     "section": "Pins VCC, GND, DIN, CLK, CS, DC, RST, BUSY"
    }
   ]
  },
  {
   "id": "epaper-29",
   "name": "E-paper 2.9\" 296x128 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI)"
    },
    {
     "name": "CLK",
     "role": "spi_sck",
     "notes": "SPI clock"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "BUSY",
     "role": "digital_out",
     "notes": "HIGH (or LOW, depending on the panel) while the screen refreshes"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "oled",
    "size": [
     80,
     38,
     4
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "e-paper",
    "e-ink",
    "epaper",
    "2.9",
    "waveshare",
    "display",
    "carta elettronica"
   ],
   "sources": [
    {
     "title": "Waveshare 2.9inch e-Paper Module user manual",
     "section": "Pins VCC, GND, DIN, CLK, CS, DC, RST, BUSY"
    }
   ]
  },
  {
   "id": "epaper-42",
   "name": "E-paper 4.2\" 400x300 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V. Newer boards add a 9th pin PWR: tie it to 3V3 or drive it HIGH"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI)"
    },
    {
     "name": "CLK",
     "role": "spi_sck",
     "notes": "SPI clock"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "BUSY",
     "role": "digital_out",
     "notes": "Tells when the screen is refreshing. Wait for it before sending more"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "oled",
    "size": [
     80,
     80,
     4
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "e-paper",
    "e-ink",
    "epaper",
    "4.2",
    "400x300",
    "waveshare",
    "carta elettronica"
   ],
   "sources": [
    {
     "title": "Waveshare 4.2inch e-Paper Module user manual",
     "section": "Pins VCC, GND, DIN, CLK, CS, DC, RST, BUSY"
    }
   ]
  },
  {
   "id": "e18-d80nk",
   "name": "E18-D80NK IR proximity switch (3-80 cm)",
   "category": "sensor",
   "measures": [
    "proximity",
    "presence"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Brown wire. Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Blue wire"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "Black wire. LOW when an object is near. Can idle at 5 V: measure first, use a divider or level shifter"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     18,
     18,
     45
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "e18-d80nk",
    "ir proximity",
    "photoelectric",
    "obstacle",
    "fotocellula",
    "ostacolo",
    "prossimità"
   ],
   "sources": [
    {
     "title": "E18-D80NK seller datasheet",
     "section": "Supply 5 V; NPN normally-open output; range 3 to 80 cm (adjustable)"
    }
   ]
  },
  {
   "id": "e32-lora-uart",
   "name": "Ebyte E32 / E22 LoRa UART module",
   "category": "output",
   "pins": [
    {
     "name": "M0",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Mode select with M1. Both LOW = normal mode. Never leave floating"
    },
    {
     "name": "M1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Mode select. Both HIGH = configuration mode"
    },
    {
     "name": "RXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin (9600 baud by default)"
    },
    {
     "name": "TXD",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin"
    },
    {
     "name": "AUX",
     "role": "digital_out",
     "notes": "LOW while the module is busy. Wait for HIGH before sending"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Draws over 100 mA when sending at full power"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     21,
     36,
     4
    ],
    "color": "#2B5F9E"
   },
   "keywords": [
    "e32",
    "e22",
    "ebyte",
    "lora",
    "uart",
    "433 mhz",
    "868 mhz",
    "sx1278",
    "radio",
    "seriale"
   ],
   "sources": [
    {
     "title": "Ebyte E32-433T20D user manual",
     "section": "Pin definition (M0, M1, RXD, TXD, AUX, VCC, GND); operating modes"
    },
    {
     "title": "Ebyte E22-900T22D user manual",
     "section": "Pin definition; same 7-pin order as E32"
    }
   ]
  },
  {
   "id": "enc28j60-ethernet",
   "name": "ENC28J60 Ethernet module",
   "category": "output",
   "pins": [
    {
     "name": "CLKOUT",
     "role": "passive",
     "notes": "Clock output, not needed"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt, optional"
    },
    {
     "name": "WOL",
     "role": "passive",
     "notes": "Wake-on-LAN, not needed"
    },
    {
     "name": "SO",
     "role": "spi_miso"
    },
    {
     "name": "SI",
     "role": "spi_mosi"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "CS",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "RESET",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V. Draws up to about 180 mA while sending"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     56,
     34,
     17
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "enc28j60",
    "ethernet",
    "lan",
    "rj45",
    "microchip",
    "rete"
   ],
   "sources": [
    {
     "title": "Microchip ENC28J60 datasheet",
     "section": "SPI interface (CS, SCK, SI, SO), INT, WOL, CLKOUT; supply 3.1 to 3.6 V; TX current about 180 mA"
    },
    {
     "title": "Common ENC28J60 module",
     "section": "2x5 header; a 12-pin version also exists. Check the silkscreen"
    }
   ]
  },
  {
   "id": "ens160-aht21",
   "name": "ENS160 + AHT21 air quality combo",
   "category": "sensor",
   "measures": [
    "air quality",
    "tvoc",
    "eco2",
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3V3",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x53",
    "0x52",
    "0x38"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20,
     16,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "ens160",
    "aht21",
    "sciosense",
    "tvoc",
    "eco2",
    "aqi",
    "air quality",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "ScioSense ENS160 datasheet",
     "section": "I2C address 0x53 (ADDR HIGH) or 0x52 (ADDR LOW); PART_ID register 0x00 = 0x0160, little endian"
    },
    {
     "title": "Aosong AHT21 datasheet",
     "section": "I2C address 0x38"
    },
    {
     "title": "ScioSense ENS160 datasheet",
     "section": "Outputs AQI-UBA 1 to 5, TVOC ppb and eCO2 ppm; eCO2 is estimated, not measured"
    }
   ]
  },
  {
   "id": "esp01-esp8266",
   "name": "ESP-01 Wi-Fi module (ESP8266)",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "GPIO2",
     "role": "passive",
     "notes": "Must be HIGH at boot. Leave unconnected"
    },
    {
     "name": "GPIO0",
     "role": "passive",
     "notes": "LOW at boot = flash mode. Leave HIGH for normal use"
    },
    {
     "name": "RXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "TXD",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (AT firmware: 115200 baud)"
    },
    {
     "name": "CH_PD",
     "role": "passive",
     "notes": "Enable: must be HIGH. Tie to 3.3 V"
    },
    {
     "name": "RST",
     "role": "passive",
     "notes": "Reset, active LOW. Leave unconnected or tie HIGH"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V only. Draws up to about 170 mA when sending"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     24.8,
     14.3,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "esp-01",
    "esp01",
    "esp8266",
    "wifi",
    "at commands",
    "wi-fi",
    "modulo wifi"
   ],
   "sources": [
    {
     "title": "Espressif ESP8266EX datasheet",
     "section": "Strapping pins GPIO0, GPIO2, GPIO15; supply 3.0 to 3.6 V; TX current up to 170 mA"
    },
    {
     "title": "Espressif ESP8266 AT instruction set",
     "section": "Default UART 115200 baud"
    }
   ]
  },
  {
   "id": "fan-5v",
   "name": "Fan 5 V (2 wires)",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "power",
     "notes": "Red wire, 5 V: use VIN. To switch it from code, add a MOSFET or transistor in the ground wire"
    },
    {
     "name": "-",
     "role": "ground",
     "notes": "Black wire"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "motor",
    "size": [
     30,
     30,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "fan",
    "cooling",
    "5v fan",
    "ventola",
    "raffreddamento"
   ],
   "sources": [
    {
     "title": "Generic 30 mm 5 V DC fan",
     "section": "Typical current 100 to 200 mA"
    }
   ]
  },
  {
   "id": "flame-sensor",
   "name": "Flame sensor module (KY-026 style)",
   "category": "sensor",
   "measures": [
    "flame"
   ],
   "pins": [
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked G on the board"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked + on the board. Use 3V3"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Changes level when a flame is seen (threshold set with the trimmer)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     36,
     15,
     8
    ],
    "color": "#B22222"
   },
   "keywords": [
    "flame",
    "fire",
    "ky-026",
    "infrared",
    "fiamma",
    "fuoco",
    "incendio"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-026 datasheet",
     "section": "Pins A0, G, +, D0; IR photodiode 760 to 1100 nm"
    }
   ]
  },
  {
   "id": "flex-sensor",
   "name": "Flex sensor 2.2\" (bend resistor)",
   "category": "sensor",
   "measures": [
    "bend"
   ],
   "pins": [
    {
     "name": "1",
     "role": "power",
     "notes": "One leg to 3V3"
    },
    {
     "name": "2",
     "role": "analog_out",
     "notes": "Other leg to an ADC pin and through about 47 kΩ to GND. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3",
   "model": {
    "shape": "led",
    "size": [
     7,
     73,
     0.5
    ],
    "color": "#C8A04A"
   },
   "keywords": [
    "flex sensor",
    "bend sensor",
    "spectra symbol",
    "glove",
    "flessione",
    "piegamento"
   ],
   "sources": [
    {
     "title": "Spectra Symbol Flex Sensor datasheet",
     "section": "Flat resistance about 25 kΩ ±30%; resistance rises when bent"
    }
   ]
  },
  {
   "id": "float-switch",
   "name": "Float switch (water level)",
   "category": "sensor",
   "measures": [
    "water level"
   ],
   "pins": [
    {
     "name": "1",
     "role": "digital_out",
     "notes": "To a GPIO with INPUT_PULLUP. Flip the float on its stem to swap open and closed"
    },
    {
     "name": "2",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     24,
     24,
     40
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "float switch",
    "water level",
    "tank",
    "galleggiante",
    "livello acqua",
    "serbatoio"
   ],
   "sources": [
    {
     "title": "Generic vertical float switch seller sheet",
     "section": "Reed switch inside the stem, operated by a magnet in the float"
    }
   ]
  },
  {
   "id": "servo-fs90r",
   "name": "FS90R continuous rotation servo",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Brown wire"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire, 4.8 to 6 V: use VIN"
    },
    {
     "name": "SIG",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Orange wire. 50 Hz PWM: 1.5 ms = stop, shorter or longer = speed and direction"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "motor",
    "size": [
     23.2,
     12.5,
     22
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "fs90r",
    "servo",
    "continuous rotation",
    "360",
    "wheel",
    "servomotore",
    "rotazione continua"
   ],
   "sources": [
    {
     "title": "Feetech FS90R datasheet",
     "section": "Supply 4.8 to 6 V; 1500 µs neutral (stop)"
    }
   ]
  },
  {
   "id": "fsr402",
   "name": "FSR 402 force sensitive resistor",
   "category": "sensor",
   "measures": [
    "force"
   ],
   "pins": [
    {
     "name": "1",
     "role": "power",
     "notes": "One leg to 3V3"
    },
    {
     "name": "2",
     "role": "analog_out",
     "notes": "Other leg to an ADC pin and through 10 kΩ to GND. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3",
   "model": {
    "shape": "led",
    "size": [
     18,
     56,
     0.5
    ],
    "color": "#C8A04A"
   },
   "keywords": [
    "fsr402",
    "fsr",
    "force sensor",
    "pressure pad",
    "interlink",
    "forza",
    "pressione"
   ],
   "sources": [
    {
     "title": "Interlink FSR 400 Series datasheet",
     "section": "Resistance falls as force rises; voltage divider circuit; not meant for precise weighing"
    }
   ]
  },
  {
   "id": "gc9a01-round",
   "name": "GC9A01 1.28\" round IPS 240x240 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "spi_sck",
     "notes": "SPI clock, not I2C"
    },
    {
     "name": "SDA",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI), not I2C"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "BL",
     "role": "passive",
     "notes": "Backlight: to 3V3 or a PWM pin"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "oled",
    "size": [
     36,
     40,
     4
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "gc9a01",
    "round display",
    "circular",
    "1.28",
    "240x240",
    "display rotondo"
   ],
   "sources": [
    {
     "title": "Galaxycore GC9A01 datasheet",
     "section": "4-line serial interface"
    }
   ]
  },
  {
   "id": "grove-gsr",
   "name": "Grove GSR skin response sensor",
   "category": "sensor",
   "measures": [
    "skin conductance"
   ],
   "pins": [
    {
     "name": "SIG",
     "role": "analog_out",
     "notes": "Yellow wire. To an ADC1 pin (GPIO 32 to 39). Power from 3V3 to keep it in range"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "White wire. Not connected"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     20,
     40,
     5
    ],
    "color": "#2E6FD8"
   },
   "keywords": [
    "gsr",
    "galvanic skin response",
    "grove",
    "eda",
    "stress",
    "conduttanza cutanea"
   ],
   "sources": [
    {
     "title": "Seeed Grove GSR sensor wiki",
     "section": "Grove pins SIG, NC, VCC, GND; supply 3.3 or 5 V; analog output"
    }
   ]
  },
  {
   "id": "guva-s12sd",
   "name": "GUVA-S12SD UV sensor module",
   "category": "sensor",
   "measures": [
    "uv"
   ],
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked - on the board"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked + on the board"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "About 0.1 V per UV index step. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     20,
     15,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "guva-s12sd",
    "uv",
    "ultraviolet",
    "uv index",
    "ultravioletti",
    "raggi uv"
   ],
   "sources": [
    {
     "title": "Genicom GUVA-S12SD datasheet",
     "section": "Photocurrent vs UV index"
    }
   ]
  },
  {
   "id": "htu21d-gy21",
   "name": "GY-21 HTU21D temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x40"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     13,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "htu21d",
    "gy-21",
    "si7021",
    "sht21",
    "humidity",
    "temperature",
    "umidità"
   ],
   "sources": [
    {
     "title": "TE Connectivity HTU21D(F) datasheet",
     "section": "I2C address 0x40 (fixed)"
    }
   ]
  },
  {
   "id": "qmc5883l-gy271",
   "name": "GY-271 QMC5883L compass",
   "category": "sensor",
   "measures": [
    "magnetic field",
    "heading"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "DRDY",
     "role": "int",
     "notes": "Data ready, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x0D"
   ],
   "idCheck": {
    "register": "0x0D",
    "expect": "0xFF"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     18,
     14,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "qmc5883l",
    "gy-271",
    "compass",
    "magnetometer",
    "bussola",
    "magnetometro"
   ],
   "sources": [
    {
     "title": "QST QMC5883L datasheet",
     "section": "I2C address 0x0D; register 0x0D chip ID (reads 0xFF)"
    }
   ]
  },
  {
   "id": "hmc5883l-gy273",
   "name": "GY-273 HMC5883L compass",
   "category": "sensor",
   "measures": [
    "magnetic field",
    "heading"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "DRDY",
     "role": "int",
     "notes": "Data ready, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x1E"
   ],
   "idCheck": {
    "register": "0x0A",
    "expect": "0x48"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     18,
     14,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "hmc5883l",
    "gy-273",
    "compass",
    "magnetometer",
    "honeywell",
    "bussola"
   ],
   "sources": [
    {
     "title": "Honeywell HMC5883L datasheet",
     "section": "Identification register A (0x0A) reads 0x48 (ASCII H)"
    },
    {
     "title": "Honeywell HMC5883L datasheet",
     "section": "I2C address 0x1E"
    }
   ]
  },
  {
   "id": "adxl345-gy291",
   "name": "GY-291 ADXL345 accelerometer",
   "category": "sensor",
   "measures": [
    "acceleration"
   ],
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "HIGH (default on the board) selects I2C"
    },
    {
     "name": "INT1",
     "role": "int"
    },
    {
     "name": "INT2",
     "role": "int"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "Address select: LOW = 0x53, HIGH = 0x1D"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x53",
    "0x1D"
   ],
   "idCheck": {
    "register": "0x00",
    "expect": "0xE5"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     21.3,
     15.7,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "adxl345",
    "gy-291",
    "accelerometer",
    "tilt",
    "acceleration",
    "accelerometro"
   ],
   "sources": [
    {
     "title": "Analog Devices ADXL345 datasheet",
     "section": "Register 0x00 DEVID (reads 0xE5)"
    },
    {
     "title": "Analog Devices ADXL345 datasheet",
     "section": "I2C: ALT ADDRESS HIGH 0x1D, LOW 0x53"
    }
   ]
  },
  {
   "id": "bh1750-gy302",
   "name": "GY-302 BH1750 light sensor",
   "category": "sensor",
   "measures": [
    "light"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "ADDR",
     "role": "passive",
     "notes": "Address select: LOW or open = 0x23, HIGH = 0x5C"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x23",
    "0x5C"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     18.5,
     13.9,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "bh1750",
    "gy-302",
    "lux",
    "light",
    "ambient light",
    "luce",
    "luminosità"
   ],
   "sources": [
    {
     "title": "ROHM BH1750FVI datasheet",
     "section": "I2C slave address: ADDR = L gives 0x23, ADDR = H gives 0x5C"
    }
   ]
  },
  {
   "id": "max44009-gy49",
   "name": "GY-49 MAX44009 ambient light",
   "category": "sensor",
   "measures": [
    "light"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "A0",
     "role": "passive",
     "notes": "Address: LOW = 0x4A, HIGH = 0x4B"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x4A",
    "0x4B"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     16.3,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "max44009",
    "gy-49",
    "maxim",
    "lux",
    "ambient light",
    "luce",
    "luminosità"
   ],
   "sources": [
    {
     "title": "Maxim MAX44009 datasheet",
     "section": "I2C address 0x4A (A0 LOW) or 0x4B (A0 HIGH); range 0.045 to 188 000 lux"
    },
    {
     "title": "Maxim MAX44009 datasheet",
     "section": "No ID register"
    }
   ]
  },
  {
   "id": "adxl335-gy61",
   "name": "GY-61 ADXL335 analog accelerometer",
   "category": "sensor",
   "measures": [
    "acceleration"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "X",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "Y",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "Z",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "breakout",
    "size": [
     20,
     16,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "adxl335",
    "gy-61",
    "analog accelerometer",
    "acceleration",
    "accelerometro"
   ],
   "sources": [
    {
     "title": "Analog Devices ADXL335 datasheet",
     "section": "Ratiometric analog outputs XOUT, YOUT, ZOUT; about 300 mV/g at 3 V"
    }
   ]
  },
  {
   "id": "ms5611-gy63",
   "name": "GY-63 MS5611 barometric pressure",
   "category": "sensor",
   "measures": [
    "pressure",
    "temperature"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "CSB",
     "role": "passive",
     "notes": "Address select: LOW = 0x77, HIGH = 0x76"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "SPI only. Leave unconnected for I2C"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x77",
    "0x76"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     21,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "ms5611",
    "gy-63",
    "barometer",
    "altimeter",
    "pressure",
    "pressione",
    "altitudine",
    "drone"
   ],
   "sources": [
    {
     "title": "TE MS5611-01BA03 datasheet",
     "section": "I2C address 111011Cx, C = inverted CSB: CSB LOW = 0x77, CSB HIGH = 0x76"
    },
    {
     "title": "TE MS5611-01BA03 datasheet",
     "section": "Command-based interface (no ID register); PROM CRC checks the data"
    }
   ]
  },
  {
   "id": "bmp180-gy68",
   "name": "GY-68 BMP180 pressure + temperature",
   "category": "sensor",
   "measures": [
    "temperature",
    "pressure"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x77"
   ],
   "idCheck": {
    "register": "0xD0",
    "expect": "0x55"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     13,
     10,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "bmp180",
    "gy-68",
    "bmp085",
    "barometer",
    "pressure",
    "pressione"
   ],
   "sources": [
    {
     "title": "Bosch BMP180 datasheet",
     "section": "Memory map: register 0xD0 chip id (fixed value 0x55)"
    },
    {
     "title": "Bosch BMP180 datasheet",
     "section": "I2C interface: module address 0xEE write / 0xEF read (7-bit 0x77)"
    }
   ]
  },
  {
   "id": "gy-87",
   "name": "GY-87 10-DOF module (MPU6050 + compass + BMP180)",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation",
    "magnetic field",
    "pressure",
    "temperature"
   ],
   "pins": [
    {
     "name": "VCC_IN",
     "role": "power",
     "notes": "Goes through the on-board regulator"
    },
    {
     "name": "3.3V",
     "role": "passive",
     "notes": "Regulator output. Leave unconnected when you power VCC_IN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "FSYNC",
     "role": "passive",
     "notes": "MPU6050 frame sync. Leave unconnected"
    },
    {
     "name": "INTA",
     "role": "int",
     "notes": "MPU6050 interrupt, optional"
    },
    {
     "name": "DRDY",
     "role": "int",
     "notes": "Compass data ready, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x68",
    "0x77",
    "0x1E",
    "0x0D"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     22,
     17,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "gy-87",
    "10dof",
    "mpu6050",
    "hmc5883l",
    "bmp180",
    "imu",
    "barometer",
    "bussola"
   ],
   "sources": [
    {
     "title": "InvenSense MPU-6050 Register Map",
     "section": "I2C 0x68; WHO_AM_I 0x75 reads 0x68"
    },
    {
     "title": "Bosch BMP180 datasheet",
     "section": "I2C address 0x77"
    },
    {
     "title": "Honeywell HMC5883L datasheet",
     "section": "I2C 0x1E, visible only after MPU6050 bypass is enabled. Newer boards carry a QMC5883L (0x0D)"
    }
   ]
  },
  {
   "id": "mlx90614-gy906",
   "name": "GY-906 MLX90614 infrared thermometer",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x5A"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     17,
     11,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mlx90614",
    "gy-906",
    "infrared",
    "contactless",
    "thermometer",
    "termometro",
    "infrarossi"
   ],
   "sources": [
    {
     "title": "Melexis MLX90614 datasheet",
     "section": "SMBus: factory default address 0x5A"
    }
   ]
  },
  {
   "id": "bme280-gy",
   "name": "GY-BME280 breakout",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity",
    "pressure"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x76",
    "0x77"
   ],
   "idCheck": {
    "register": "0xD0",
    "expect": "0x60",
    "otherValues": {
     "0x58": "This is a BMP280: no humidity sensor. Common mix-up with cheap boards."
    }
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     11,
     13,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "bme280",
    "bmp280",
    "gy-bme280",
    "temperature",
    "humidity",
    "pressure",
    "barometer",
    "bosch"
   ],
   "sources": [
    {
     "title": "Bosch BME280 datasheet",
     "section": "5.4.1 Register 0xD0 id"
    },
    {
     "title": "Bosch BME280 datasheet",
     "section": "6.2 I2C interface (address 0x76 when SDO = GND, 0x77 when SDO = VDDIO)"
    },
    {
     "title": "Bosch BMP280 datasheet",
     "section": "4.3.1 Register 0xD0 id (0x58)"
    }
   ],
   "starterSketch": "bme280"
  },
  {
   "id": "bmp280-gy",
   "name": "GY-BMP280 pressure + temperature",
   "category": "sensor",
   "measures": [
    "temperature",
    "pressure"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "CSB",
     "role": "passive",
     "notes": "Chip select. Leave unconnected (pulled HIGH on the board) to use I2C"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "Address select: LOW = 0x76, HIGH = 0x77. Most boards default to 0x76"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x76",
    "0x77"
   ],
   "idCheck": {
    "register": "0xD0",
    "expect": "0x58",
    "otherValues": {
     "0x60": "This is a BME280: it also measures humidity."
    }
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     16.2,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "bmp280",
    "gy-bmp280",
    "barometer",
    "pressure",
    "temperature",
    "bosch",
    "pressione",
    "barometro"
   ],
   "sources": [
    {
     "title": "Bosch BMP280 datasheet",
     "section": "Register 0xD0 id (reads 0x58)"
    },
    {
     "title": "Bosch BMP280 datasheet",
     "section": "I2C interface: address 0x76 when SDO = GND, 0x77 when SDO = VDDIO"
    }
   ]
  },
  {
   "id": "load-cell-50kg-half",
   "name": "Half-bridge load cell 50 kg (3 wires)",
   "category": "sensor",
   "measures": [
    "weight"
   ],
   "pins": [
    {
     "name": "RED",
     "role": "passive",
     "notes": "Centre tap: signal. Colours vary: the two outer wires show the highest resistance between them"
    },
    {
     "name": "BLACK",
     "role": "passive",
     "notes": "Outer end: excitation"
    },
    {
     "name": "WHITE",
     "role": "passive",
     "notes": "Outer end: excitation"
    }
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     34,
     34,
     8
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "load cell",
    "50kg",
    "half bridge",
    "body scale",
    "cella di carico",
    "bilancia pesapersone",
    "peso"
   ],
   "sources": [
    {
     "title": "Avia Semiconductor HX711 datasheet",
     "section": "Needs a full bridge: use 2 or 4 half-bridge cells, or add 2 matching resistors"
    }
   ]
  },
  {
   "id": "hc-05-bluetooth",
   "name": "HC-05 Bluetooth serial module",
   "category": "output",
   "pins": [
    {
     "name": "EN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "KEY/EN: HIGH at power-up enters AT command mode. Leave unconnected normally"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 3.6 to 6 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "TXD",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (3.3 V level)"
    },
    {
     "name": "RXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "STATE",
     "role": "digital_out",
     "notes": "HIGH when connected, optional"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     37,
     16,
     5
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "hc-05",
    "bluetooth",
    "serial",
    "spp",
    "wireless",
    "seriale"
   ],
   "sources": [
    {
     "title": "HC-05 Bluetooth module datasheet",
     "section": "Pins EN/KEY, VCC, GND, TXD, RXD, STATE; UART at 3.3 V levels"
    }
   ]
  },
  {
   "id": "hc-06-bluetooth",
   "name": "HC-06 Bluetooth serial module (4 pins)",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Breakout with regulator: 3.6 to 6 V, use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "TXD",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud by default)"
    },
    {
     "name": "RXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     37,
     16,
     5
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "hc-06",
    "hc06",
    "bluetooth",
    "spp",
    "slave",
    "wireless",
    "seriale"
   ],
   "sources": [
    {
     "title": "HC-06 Bluetooth module datasheet (Guangzhou HC)",
     "section": "UART 9600 baud default; slave only; 3.3 V logic levels"
    }
   ]
  },
  {
   "id": "hc-12",
   "name": "HC-12 433 MHz serial radio",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.2 to 5.5 V. Draws about 100 mA when sending at full power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "RXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin (9600 baud by default)"
    },
    {
     "name": "TXD",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin"
    },
    {
     "name": "SET",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "LOW = AT command mode. Leave HIGH (internal pull-up) for normal use"
    },
    {
     "name": "ANT",
     "role": "passive",
     "notes": "Antenna: spring antenna or u.FL connector"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     27.8,
     14.4,
     4
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "hc-12",
    "hc12",
    "433 mhz",
    "si4463",
    "wireless serial",
    "radio",
    "seriale senza fili"
   ],
   "sources": [
    {
     "title": "HC-12 wireless serial port communication module user manual",
     "section": "Pins VCC, GND, RXD, TXD, SET; 433.4 to 473.0 MHz; 9600 baud default; supply 3.2 to 5.5 V"
    }
   ]
  },
  {
   "id": "hc-sr04",
   "name": "HC-SR04 ultrasonic distance",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "TRIG",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "A 10 µs HIGH pulse starts a measurement"
    },
    {
     "name": "ECHO",
     "role": "digital_out",
     "notes": "Outputs 5 V: use a voltage divider (e.g. 1 kΩ + 2 kΩ) before the ESP32 pin"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     45,
     20,
     15
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "hc-sr04",
    "ultrasonic",
    "distance",
    "sonar",
    "ultrasuoni",
    "distanza",
    "sensore distanza"
   ],
   "sources": [
    {
     "title": "Cytron / ElecFreaks HC-SR04 user manual",
     "section": "Pins VCC, Trig, Echo, GND; 10 µs trigger pulse; 5 V supply"
    }
   ]
  },
  {
   "id": "hc-sr04p",
   "name": "HC-SR04P ultrasonic distance (3.3-5 V)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3: then ECHO is also 3.3 V and safe for the ESP32"
    },
    {
     "name": "TRIG",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "A 10 µs HIGH pulse starts a measurement"
    },
    {
     "name": "ECHO",
     "role": "digital_out",
     "notes": "Pulse length = echo time. Level equals VCC: at 5 V use a divider"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     45,
     20,
     15
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "hc-sr04p",
    "hc-sr04",
    "ultrasonic",
    "3.3v",
    "sonar",
    "ultrasuoni",
    "distanza"
   ],
   "sources": [
    {
     "title": "HC-SR04P seller datasheet",
     "section": "Supply 3 to 5.5 V; echo output at supply level; same timing as HC-SR04"
    }
   ]
  },
  {
   "id": "hc-sr501",
   "name": "HC-SR501 PIR motion sensor",
   "category": "sensor",
   "measures": [
    "motion"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 4.5 V or more: use VIN"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "3.3 V HIGH when motion is detected, safe for the ESP32"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     24,
     25
    ],
    "color": "#1E7A3C"
   },
   "keywords": [
    "hc-sr501",
    "pir",
    "motion",
    "movement",
    "infrared",
    "movimento",
    "presenza"
   ],
   "sources": [
    {
     "title": "HC-SR501 PIR module manual",
     "section": "Supply 4.5 to 20 V; output 3.3 V HIGH / 0 V LOW"
    }
   ]
  },
  {
   "id": "hc-sr505",
   "name": "HC-SR505 mini PIR motion sensor",
   "category": "sensor",
   "measures": [
    "motion"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked +. Needs 4.5 to 20 V: use VIN"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "HIGH (3.3 V) for about 8 s after motion"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked -"
    }
   ],
   "bus": "gpio",
   "voltage": "4.5-20",
   "model": {
    "shape": "module",
    "size": [
     10,
     10,
     24
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "hc-sr505",
    "pir",
    "mini pir",
    "motion",
    "movimento",
    "presenza"
   ],
   "sources": [
    {
     "title": "HC-SR505 seller datasheet",
     "section": "Supply 4.5 to 20 V; output HIGH 3.3 V, LOW 0 V; delay about 8 s; range up to 3 m"
    }
   ]
  },
  {
   "id": "hdc1080",
   "name": "HDC1080 temperature + humidity (CJMCU-1080)",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Chip accepts 2.7 to 5.5 V. Use 3V3 so the on-board pull-ups stay at 3.3 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x40"
   ],
   "idCheck": {
    "register": "0xFF",
    "expect": "0x10"
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     15,
     12,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "hdc1080",
    "cjmcu-1080",
    "texas instruments",
    "humidity",
    "temperature",
    "umidità",
    "temperatura"
   ],
   "sources": [
    {
     "title": "TI HDC1080 datasheet",
     "section": "I2C address 0x40 (fixed)"
    },
    {
     "title": "TI HDC1080 datasheet",
     "section": "Register map: 0xFF Device ID = 0x1050 (first byte read is 0x10)"
    },
    {
     "title": "TI HDC1080 datasheet",
     "section": "Supply 2.7 to 5.5 V"
    }
   ]
  },
  {
   "id": "ld2410c",
   "name": "HLK-LD2410C mmWave presence radar",
   "category": "sensor",
   "measures": [
    "presence",
    "distance"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (256000 baud)"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "HIGH when a person is present (3.3 V)"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     22,
     16,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ld2410",
    "ld2410c",
    "hi-link",
    "mmwave",
    "radar",
    "presence",
    "presenza",
    "human presence"
   ],
   "sources": [
    {
     "title": "Hi-Link HLK-LD2410C user manual",
     "section": "Supply 5 V, UART 256000 baud, OUT pin 3.3 V"
    }
   ]
  },
  {
   "id": "ld2420",
   "name": "HLK-LD2420 mmWave presence radar",
   "category": "sensor",
   "measures": [
    "presence",
    "distance"
   ],
   "pins": [
    {
     "name": "3V3",
     "role": "power",
     "notes": "Needs 3.3 V. Pin order may differ by board revision: check the silkscreen"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "OT1",
     "role": "digital_out",
     "notes": "UART TX of the radar. Connect to an ESP32 RX pin (115200 or 256000 baud, depends on firmware)"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "OT2",
     "role": "digital_out",
     "notes": "HIGH when a person is present (3.3 V)"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     20,
     20,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ld2420",
    "hlk-ld2420",
    "hi-link",
    "mmwave",
    "radar",
    "presence",
    "presenza"
   ],
   "sources": [
    {
     "title": "Hi-Link HLK-LD2420 user manual",
     "section": "Supply 3.3 V; pins 3V3, GND, OT1 (UART TX), RX, OT2 (presence output)"
    }
   ]
  },
  {
   "id": "ld2450",
   "name": "HLK-LD2450 mmWave multi-target tracking radar",
   "category": "sensor",
   "measures": [
    "presence",
    "position",
    "distance"
   ],
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (256000 baud)"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     44,
     15,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ld2450",
    "hlk-ld2450",
    "hi-link",
    "mmwave",
    "radar",
    "tracking",
    "presenza",
    "human presence"
   ],
   "sources": [
    {
     "title": "Hi-Link HLK-LD2450 user manual",
     "section": "Supply 5 V, I/O 3.3 V; UART 256000 baud; tracks up to 3 targets, about 6 m"
    }
   ]
  },
  {
   "id": "hm-10-ble",
   "name": "HM-10 Bluetooth Low Energy module",
   "category": "output",
   "pins": [
    {
     "name": "STATE",
     "role": "digital_out",
     "notes": "HIGH when connected, optional"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Breakout with regulator: 3.3 to 6 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "TXD",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud by default)"
    },
    {
     "name": "RXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "BRK",
     "role": "passive",
     "notes": "Pull LOW to drop the connection, optional"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     37,
     16,
     5
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "hm-10",
    "hm10",
    "ble",
    "bluetooth 4.0",
    "cc2541",
    "bluetooth",
    "seriale"
   ],
   "sources": [
    {
     "title": "JNHuaMao HM-10 Bluetooth 4.0 BLE module datasheet",
     "section": "UART 9600 baud default; AT commands; CC2541. Many clones exist (CC41-A, MLT-BT05)"
    }
   ]
  },
  {
   "id": "ht16k33-7seg",
   "name": "HT16K33 4-digit 7-segment backpack (I2C)",
   "category": "display",
   "pins": [
    {
     "name": "+",
     "role": "power",
     "notes": "Pin order varies between boards: match by the printed label. HT16K33 is rated 4.5 to 5.5 V. At 3V3 it usually works, dimmer"
    },
    {
     "name": "-",
     "role": "ground"
    },
    {
     "name": "D",
     "role": "i2c_sda",
     "notes": "I2C data (SDA)"
    },
    {
     "name": "C",
     "role": "i2c_scl",
     "notes": "I2C clock (SCL)"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x70",
    "0x71",
    "0x72",
    "0x73",
    "0x74",
    "0x75",
    "0x76",
    "0x77"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     50,
     19,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ht16k33",
    "7 segment",
    "backpack",
    "adafruit",
    "i2c display",
    "display 7 segmenti"
   ],
   "sources": [
    {
     "title": "Holtek HT16K33 datasheet",
     "section": "Slave address 1110 A2 A1 A0; VDD 4.5 to 5.5 V"
    },
    {
     "title": "Adafruit LED Backpacks guide",
     "section": "0.56\" 7-segment backpack pinouts, address jumpers A0 to A2"
    }
   ]
  },
  {
   "id": "ht16k33-matrix-8x8",
   "name": "HT16K33 8x8 LED matrix backpack (I2C)",
   "category": "display",
   "pins": [
    {
     "name": "+",
     "role": "power",
     "notes": "Pin order varies between boards: match by the printed label. HT16K33 is rated 4.5 to 5.5 V. At 3V3 it usually works, dimmer"
    },
    {
     "name": "-",
     "role": "ground"
    },
    {
     "name": "D",
     "role": "i2c_sda",
     "notes": "I2C data (SDA)"
    },
    {
     "name": "C",
     "role": "i2c_scl",
     "notes": "I2C clock (SCL)"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x70",
    "0x71",
    "0x72",
    "0x73",
    "0x74",
    "0x75",
    "0x76",
    "0x77"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     32,
     32,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ht16k33",
    "led matrix",
    "8x8",
    "backpack",
    "adafruit",
    "matrice led"
   ],
   "sources": [
    {
     "title": "Holtek HT16K33 datasheet",
     "section": "Slave address 1110 A2 A1 A0; VDD 4.5 to 5.5 V"
    },
    {
     "title": "Adafruit LED Backpacks guide",
     "section": "8x8 matrix backpack pinouts, address jumpers A0 to A2"
    }
   ]
  },
  {
   "id": "hx710b",
   "name": "HX710B air pressure module (0-40 kPa)",
   "category": "sensor",
   "measures": [
    "pressure"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Pin order differs between sellers: check the silkscreen"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "Data out of the HX710B"
    },
    {
     "name": "SCK",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Clock driven by the ESP32 (not SPI)"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     20,
     18,
     12
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "hx710b",
    "mps20n0040d",
    "air pressure",
    "blood pressure",
    "water level",
    "pressione",
    "pressione aria"
   ],
   "sources": [
    {
     "title": "Avia Semiconductor HX710 datasheet",
     "section": "Serial interface PD_SCK and DOUT, like HX711"
    },
    {
     "title": "MPS20N0040D-S datasheet",
     "section": "Pressure range 0 to 40 kPa"
    }
   ]
  },
  {
   "id": "hx711",
   "name": "HX711 load cell amplifier",
   "category": "sensor",
   "measures": [
    "weight"
   ],
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DT",
     "role": "digital_out",
     "notes": "Data out of the HX711"
    },
    {
     "name": "SCK",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Clock driven by the ESP32 (not SPI)"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "E+",
     "role": "passive",
     "notes": "Load cell red wire (excitation +)"
    },
    {
     "name": "E-",
     "role": "passive",
     "notes": "Load cell black wire (excitation -)"
    },
    {
     "name": "A-",
     "role": "passive",
     "notes": "Load cell white wire (signal -)"
    },
    {
     "name": "A+",
     "role": "passive",
     "notes": "Load cell green wire (signal +). Wire colours vary by load cell"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     34,
     21,
     3
    ],
    "color": "#1E7A3C"
   },
   "keywords": [
    "hx711",
    "load cell",
    "scale",
    "weight",
    "bilancia",
    "peso",
    "cella di carico"
   ],
   "sources": [
    {
     "title": "Avia Semiconductor HX711 datasheet",
     "section": "Serial interface PD_SCK and DOUT; supply 2.6 to 5.5 V"
    }
   ]
  },
  {
   "id": "icm20948",
   "name": "ICM-20948 9-axis IMU breakout",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation",
    "magnetic field",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "Pin order and labels differ between sellers: check the silkscreen"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "AD0",
     "role": "passive",
     "notes": "Address select: LOW = 0x68, HIGH = 0x69 (some boards pull it HIGH)"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "SPI chip select. Leave unconnected or HIGH for I2C"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "FSYNC",
     "role": "passive",
     "notes": "Frame sync. Leave unconnected or tie to GND"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x68",
    "0x69"
   ],
   "idCheck": {
    "register": "0x00",
    "expect": "0xea"
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     25.4,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "icm-20948",
    "icm20948",
    "imu",
    "9dof",
    "accelerometer",
    "gyro",
    "magnetometer",
    "giroscopio",
    "accelerometro"
   ],
   "sources": [
    {
     "title": "TDK InvenSense ICM-20948 datasheet",
     "section": "USER BANK 0 register 0x00 WHO_AM_I (reads 0xEA)"
    },
    {
     "title": "TDK InvenSense ICM-20948 datasheet",
     "section": "I2C slave address b110100X, X = AD0 (0x68 / 0x69); VDD 1.71 to 3.6 V"
    }
   ]
  },
  {
   "id": "icm42688p",
   "name": "ICM-42688-P 6-axis IMU breakout",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation",
    "temperature"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3. Pin order differs between sellers: check the silkscreen"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "AD0",
     "role": "passive",
     "notes": "Address select (SDO): LOW = 0x68, HIGH = 0x69"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "SPI chip select. Leave unconnected or HIGH for I2C"
    },
    {
     "name": "INT1",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "INT2",
     "role": "int",
     "notes": "Second interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x68",
    "0x69"
   ],
   "idCheck": {
    "register": "0x75",
    "expect": "0x47"
   },
   "voltage": "3.3",
   "model": {
    "shape": "breakout",
    "size": [
     21.3,
     16,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "icm-42688-p",
    "icm42688",
    "imu",
    "accelerometer",
    "gyro",
    "drone",
    "giroscopio"
   ],
   "sources": [
    {
     "title": "TDK InvenSense ICM-42688-P datasheet",
     "section": "Register 0x75 WHO_AM_I (reads 0x47)"
    },
    {
     "title": "TDK InvenSense ICM-42688-P datasheet",
     "section": "I2C address b110100X, X = AP_AD0; VDD 1.71 to 3.6 V"
    }
   ]
  },
  {
   "id": "ili9341-tft-28",
   "name": "ILI9341 2.8\" TFT 240x320 with touch (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "RESET",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "SDI(MOSI)",
     "role": "spi_mosi"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "LED",
     "role": "passive",
     "notes": "Backlight: to 3V3"
    },
    {
     "name": "SDO(MISO)",
     "role": "spi_miso",
     "notes": "Optional: only needed to read from the display"
    },
    {
     "name": "T_CLK",
     "role": "spi_sck",
     "notes": "Touch controller clock (XPT2046), shares the SPI bus"
    },
    {
     "name": "T_CS",
     "role": "spi_cs",
     "notes": "Touch controller chip select"
    },
    {
     "name": "T_DIN",
     "role": "spi_mosi",
     "notes": "Touch controller data in"
    },
    {
     "name": "T_DO",
     "role": "spi_miso",
     "notes": "Touch controller data out"
    },
    {
     "name": "T_IRQ",
     "role": "int",
     "notes": "LOW while the screen is touched"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "oled",
    "size": [
     50,
     80,
     5
    ],
    "color": "#B22222"
   },
   "keywords": [
    "ili9341",
    "tft",
    "2.8",
    "240x320",
    "touch",
    "xpt2046",
    "display",
    "touchscreen"
   ],
   "sources": [
    {
     "title": "ILITEK ILI9341 datasheet",
     "section": "4-line serial interface"
    },
    {
     "title": "XPT2046 touch controller datasheet",
     "section": "SPI interface and PENIRQ"
    }
   ]
  },
  {
   "id": "ili9488-tft-35",
   "name": "ILI9488 3.5\" TFT 320x480 with touch (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "On-board 3.3 V regulator: 3V3 or 5 V both work on most boards"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "RESET",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "DC/RS",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "SDI(MOSI)",
     "role": "spi_mosi"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "LED",
     "role": "passive",
     "notes": "Backlight: to 3V3 (always on) or through a transistor for dimming"
    },
    {
     "name": "SDO(MISO)",
     "role": "spi_miso",
     "notes": "Leave unconnected if touch or SD misbehave: some ILI9488 boards never release this line"
    },
    {
     "name": "T_CLK",
     "role": "spi_sck",
     "notes": "Touch controller clock (XPT2046), shares the SPI bus"
    },
    {
     "name": "T_CS",
     "role": "spi_cs",
     "notes": "Touch controller chip select"
    },
    {
     "name": "T_DIN",
     "role": "spi_mosi",
     "notes": "Touch controller data in"
    },
    {
     "name": "T_DO",
     "role": "spi_miso",
     "notes": "Touch controller data out"
    },
    {
     "name": "T_IRQ",
     "role": "int",
     "notes": "LOW while the screen is touched"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "oled",
    "size": [
     56,
     80,
     6
    ],
    "color": "#B22222"
   },
   "keywords": [
    "ili9488",
    "tft",
    "3.5",
    "320x480",
    "touch",
    "xpt2046",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "ILITEK ILI9488 datasheet",
     "section": "4-line serial interface: 18-bit color only (3 bytes per pixel)"
    },
    {
     "title": "LCDwiki 3.5inch SPI Module ILI9488 (MSP3520) user manual",
     "section": "Pin description"
    }
   ]
  },
  {
   "id": "ina219",
   "name": "INA219 current + voltage monitor",
   "category": "sensor",
   "measures": [
    "current",
    "voltage",
    "power"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "VIN-",
     "role": "passive",
     "notes": "To the load. Measured circuit only, up to 26 V"
    },
    {
     "name": "VIN+",
     "role": "passive",
     "notes": "From the supply. Measured circuit only, up to 26 V"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x40",
    "0x41",
    "0x44",
    "0x45"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25,
     20,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "ina219",
    "current",
    "voltage",
    "power",
    "corrente",
    "tensione",
    "consumo"
   ],
   "sources": [
    {
     "title": "Texas Instruments INA219 datasheet",
     "section": "Serial bus address: A0/A1 select 0x40 to 0x4F (boards expose 0x40, 0x41, 0x44, 0x45)"
    },
    {
     "title": "Texas Instruments INA219 datasheet",
     "section": "Bus voltage range 0 to 26 V"
    }
   ]
  },
  {
   "id": "ina226",
   "name": "INA226 current + voltage monitor",
   "category": "sensor",
   "measures": [
    "current",
    "voltage",
    "power"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "ALE",
     "role": "int",
     "notes": "Alert output, optional"
    },
    {
     "name": "VBS",
     "role": "passive",
     "notes": "Bus voltage sense. Usually linked to IN- on the board"
    },
    {
     "name": "IN-",
     "role": "passive",
     "notes": "To the load. Measured circuit only, up to 36 V"
    },
    {
     "name": "IN+",
     "role": "passive",
     "notes": "From the supply. Measured circuit only, up to 36 V"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x40",
    "0x41",
    "0x42",
    "0x43",
    "0x44",
    "0x45",
    "0x46",
    "0x47",
    "0x48",
    "0x49",
    "0x4A",
    "0x4B",
    "0x4C",
    "0x4D",
    "0x4E",
    "0x4F"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     22,
     18,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "ina226",
    "current",
    "voltage",
    "power",
    "corrente",
    "tensione"
   ],
   "sources": [
    {
     "title": "Texas Instruments INA226 datasheet",
     "section": "Serial bus address: A0/A1 select 0x40 to 0x4F"
    },
    {
     "title": "Texas Instruments INA226 datasheet",
     "section": "Bus voltage 0 to 36 V"
    }
   ]
  },
  {
   "id": "ina228",
   "name": "INA228 20-bit power + energy monitor (85 V)",
   "category": "sensor",
   "measures": [
    "current",
    "voltage",
    "power",
    "energy",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "ALERT",
     "role": "int",
     "notes": "Alert output, optional"
    },
    {
     "name": "VBUS",
     "role": "passive",
     "notes": "Bus voltage sense. Measured circuit only, up to 85 V"
    },
    {
     "name": "VIN+",
     "role": "passive",
     "notes": "From the supply. Measured circuit only, up to 85 V"
    },
    {
     "name": "VIN-",
     "role": "passive",
     "notes": "To the load"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x40",
    "0x41",
    "0x44",
    "0x45"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     22.9,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ina228",
    "current",
    "voltage",
    "energy",
    "power monitor",
    "corrente",
    "tensione",
    "energia"
   ],
   "sources": [
    {
     "title": "Texas Instruments INA228 datasheet",
     "section": "Bus voltage 0 to 85 V; 20-bit ADC; energy and charge accumulators"
    },
    {
     "title": "Texas Instruments INA228 datasheet",
     "section": "A0/A1 select 0x40 to 0x4F (boards expose 0x40, 0x41, 0x44, 0x45)"
    }
   ]
  },
  {
   "id": "ina260",
   "name": "INA260 current + voltage monitor (built-in shunt)",
   "category": "sensor",
   "measures": [
    "current",
    "voltage",
    "power"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "ALERT",
     "role": "int",
     "notes": "Alert output, optional"
    },
    {
     "name": "VBUS",
     "role": "passive",
     "notes": "Bus voltage sense. Measured circuit only, up to 36 V"
    },
    {
     "name": "VIN+",
     "role": "passive",
     "notes": "From the supply. Measured circuit only, up to 36 V and 15 A"
    },
    {
     "name": "VIN-",
     "role": "passive",
     "notes": "To the load"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x40",
    "0x41",
    "0x44",
    "0x45"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     23,
     23,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ina260",
    "current",
    "voltage",
    "power",
    "power monitor",
    "corrente",
    "tensione",
    "consumo"
   ],
   "sources": [
    {
     "title": "Texas Instruments INA260 datasheet",
     "section": "Integrated 2 mΩ shunt, up to 15 A continuous; bus 0 to 36 V"
    },
    {
     "title": "Texas Instruments INA260 datasheet",
     "section": "A0/A1 select 0x40 to 0x4F (boards expose 0x40, 0x41, 0x44, 0x45)"
    }
   ]
  },
  {
   "id": "ina3221",
   "name": "INA3221 3-channel current + voltage monitor",
   "category": "sensor",
   "measures": [
    "current",
    "voltage",
    "power"
   ],
   "pins": [
    {
     "name": "VS",
     "role": "power",
     "notes": "Pin order differs between boards: check the silkscreen"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "WAR",
     "role": "int",
     "notes": "Warning alert, open drain. Optional"
    },
    {
     "name": "CRI",
     "role": "int",
     "notes": "Critical alert, open drain. Optional"
    },
    {
     "name": "TC",
     "role": "passive",
     "notes": "Timing control alert. Leave unconnected"
    },
    {
     "name": "PV",
     "role": "passive",
     "notes": "Power valid alert. Leave unconnected"
    },
    {
     "name": "IN1+",
     "role": "passive",
     "notes": "Channel 1 from the supply. Measured circuit only, up to 26 V"
    },
    {
     "name": "IN1-",
     "role": "passive",
     "notes": "Channel 1 to the load"
    },
    {
     "name": "IN2+",
     "role": "passive",
     "notes": "Channel 2 from the supply"
    },
    {
     "name": "IN2-",
     "role": "passive",
     "notes": "Channel 2 to the load"
    },
    {
     "name": "IN3+",
     "role": "passive",
     "notes": "Channel 3 from the supply"
    },
    {
     "name": "IN3-",
     "role": "passive",
     "notes": "Channel 3 to the load"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x40",
    "0x41",
    "0x42",
    "0x43"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     36.6,
     25,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ina3221",
    "current",
    "voltage",
    "3 channel",
    "power monitor",
    "corrente",
    "tensione"
   ],
   "sources": [
    {
     "title": "Texas Instruments INA3221 datasheet",
     "section": "Address pin A0 to GND/VS/SDA/SCL = 0x40/0x41/0x42/0x43"
    },
    {
     "title": "Texas Instruments INA3221 datasheet",
     "section": "Bus voltage 0 to 26 V; shunt range ±163.84 mV"
    }
   ]
  },
  {
   "id": "inmp441",
   "name": "INMP441 I2S digital microphone",
   "category": "sensor",
   "measures": [
    "sound"
   ],
   "pins": [
    {
     "name": "L/R",
     "role": "passive",
     "notes": "Channel select: GND = left, 3V3 = right"
    },
    {
     "name": "WS",
     "role": "spi_cs",
     "notes": "I2S word select (LRCLK), not SPI"
    },
    {
     "name": "SCK",
     "role": "spi_sck",
     "notes": "I2S bit clock (BCLK), not SPI"
    },
    {
     "name": "SD",
     "role": "digital_out",
     "notes": "I2S data out of the microphone"
    },
    {
     "name": "VDD",
     "role": "power",
     "notes": "3.3 V only"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "breakout",
    "size": [
     16.2,
     16,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "inmp441",
    "i2s",
    "mems microphone",
    "microphone",
    "audio",
    "microfono"
   ],
   "sources": [
    {
     "title": "InvenSense INMP441 datasheet",
     "section": "I2S interface: SCK, WS, SD, L/R; supply 1.8 to 3.3 V"
    }
   ]
  },
  {
   "id": "ir-break-beam",
   "name": "IR break-beam sensor pair (emitter + receiver)",
   "category": "sensor",
   "measures": [
    "presence"
   ],
   "pins": [
    {
     "name": "TX-VCC",
     "role": "power",
     "notes": "Emitter red wire"
    },
    {
     "name": "TX-GND",
     "role": "ground",
     "notes": "Emitter black wire"
    },
    {
     "name": "RX-VCC",
     "role": "power",
     "notes": "Receiver red wire"
    },
    {
     "name": "RX-GND",
     "role": "ground",
     "notes": "Receiver black wire"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "Receiver white wire. Open collector: use INPUT_PULLUP. LOW when the beam is unbroken"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     20,
     10,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "break beam",
    "ir beam",
    "barrier",
    "light barrier",
    "barriera",
    "fotocellula",
    "infrarossi"
   ],
   "sources": [
    {
     "title": "Adafruit IR Break Beam Sensors guide",
     "section": "Receiver output is open collector and needs a pull-up; 3.3 to 5 V supply"
    }
   ]
  },
  {
   "id": "ir-transmitter-ky005",
   "name": "IR LED transmitter (KY-005)",
   "category": "output",
   "pins": [
    {
     "name": "S",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "To a GPIO driven at 38 kHz by an IR library"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Middle pin"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked - on the board"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     18.5,
     15,
     8
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ky-005",
    "ir led",
    "infrared transmitter",
    "remote",
    "trasmettitore ir",
    "telecomando"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-005 datasheet",
     "section": "940 nm IR LED"
    }
   ]
  },
  {
   "id": "ir-obstacle-fc51",
   "name": "IR obstacle sensor (FC-51)",
   "category": "input",
   "pins": [
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "LOW when an obstacle is in front"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     31,
     14,
     7
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "fc-51",
    "ir obstacle",
    "infrared",
    "avoidance",
    "ostacolo",
    "infrarossi"
   ],
   "sources": [
    {
     "title": "Texas Instruments LM393 datasheet",
     "section": "Comparator output"
    }
   ]
  },
  {
   "id": "isl29125",
   "name": "ISL29125 RGB light sensor",
   "category": "sensor",
   "measures": [
    "color",
    "light"
   ],
   "pins": [
    {
     "name": "3V3",
     "role": "power",
     "notes": "Chip maximum is 3.63 V: use 3V3 only"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x44"
   ],
   "idCheck": {
    "register": "0x00",
    "expect": "0x7d"
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     15,
     15,
     1.6
    ],
    "color": "#B22222"
   },
   "keywords": [
    "isl29125",
    "renesas",
    "intersil",
    "rgb",
    "color",
    "colore",
    "luce"
   ],
   "sources": [
    {
     "title": "Intersil ISL29125 datasheet",
     "section": "Register 0x00 Device ID (reads 0x7D); I2C address 0x44"
    },
    {
     "title": "Intersil ISL29125 datasheet",
     "section": "Supply 2.25 to 3.63 V"
    }
   ]
  },
  {
   "id": "jsn-sr04t",
   "name": "JSN-SR04T waterproof ultrasonic distance",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Use VIN"
    },
    {
     "name": "TRIG",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "ECHO",
     "role": "digital_out",
     "notes": "May output 5 V: use a voltage divider"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     41,
     28,
     10
    ],
    "color": "#1E7A3C"
   },
   "keywords": [
    "jsn-sr04t",
    "aj-sr04m",
    "waterproof",
    "ultrasonic",
    "distance",
    "impermeabile",
    "distanza",
    "ultrasuoni"
   ],
   "sources": [
    {
     "title": "JSN-SR04T module manual",
     "section": "Mode 1 (default): trigger/echo like HC-SR04, minimum distance about 20 cm"
    }
   ]
  },
  {
   "id": "ky-013",
   "name": "KY-013 analog temperature (NTC)",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "S",
     "role": "analog_out",
     "notes": "To an ADC1 pin (GPIO 32 to 39). On many boards the reading falls as it gets warmer"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Middle pin. Use 3V3 so the output stays in the ADC range"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked - on the board"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     18.5,
     15,
     5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ky-013",
    "ntc",
    "thermistor",
    "termistore",
    "temperature",
    "temperatura",
    "analog"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-013 datasheet",
     "section": "10 kΩ NTC thermistor in a divider with a 10 kΩ resistor; pins S, +, -"
    }
   ]
  },
  {
   "id": "ky-024",
   "name": "KY-024 linear hall module (49E + LM393)",
   "category": "sensor",
   "measures": [
    "magnetic field"
   ],
   "pins": [
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "49E output, about VCC/2 with no magnet. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked G on the board"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked + on the board. Use 3V3 so AO stays under 3.3 V"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Changes level when the field passes the trimmer threshold"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     36,
     15,
     8
    ],
    "color": "#B22222"
   },
   "keywords": [
    "ky-024",
    "linear hall",
    "hall",
    "magnet",
    "lm393",
    "sensore hall",
    "magnete"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-024 datasheet",
     "section": "Pins A0, G, +, D0"
    },
    {
     "title": "Honeywell SS49E datasheet",
     "section": "Ratiometric output, null at about Vs/2"
    }
   ]
  },
  {
   "id": "ky-031",
   "name": "KY-031 knock sensor",
   "category": "sensor",
   "measures": [
    "vibration"
   ],
   "pins": [
    {
     "name": "S",
     "role": "digital_out",
     "notes": "Short pulse on a knock: use an interrupt"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Middle pin, marked +. Use 3V3"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked -"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     24,
     15,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ky-031",
    "knock",
    "shock",
    "tap",
    "bussare",
    "urto",
    "vibrazione"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-031 datasheet",
     "section": "Pins S (signal), + (middle), -; spring contact with 10 kΩ resistor"
    }
   ]
  },
  {
   "id": "sound-module-ky037",
   "name": "KY-037 big sound sensor",
   "category": "sensor",
   "measures": [
    "sound"
   ],
   "pins": [
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked G on the board"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked + on the board. Use 3V3"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Changes level above the trimmer threshold"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     44,
     15,
     10
    ],
    "color": "#B22222"
   },
   "keywords": [
    "ky-037",
    "sound",
    "microphone",
    "suono",
    "microfono"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-037 datasheet",
     "section": "Pins A0, G, +, D0"
    }
   ]
  },
  {
   "id": "ky-038",
   "name": "KY-038 sound sensor",
   "category": "sensor",
   "measures": [
    "sound"
   ],
   "pins": [
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked G on the board"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked + on the board. Use 3V3"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Changes level when sound is louder than the trimmer threshold"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     42,
     15,
     8
    ],
    "color": "#B22222"
   },
   "keywords": [
    "ky-038",
    "sound",
    "microphone",
    "noise",
    "clap",
    "suono",
    "microfono",
    "rumore"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-038 datasheet",
     "section": "Pins A0, G, +, D0"
    }
   ]
  },
  {
   "id": "ky-039",
   "name": "KY-039 finger heartbeat sensor",
   "category": "sensor",
   "measures": [
    "heart rate"
   ],
   "pins": [
    {
     "name": "S",
     "role": "analog_out",
     "notes": "Very small signal that changes with each heartbeat. To an ADC1 pin (GPIO 32 to 39)"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Middle pin. Use 3V3"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked - on the board"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     18.5,
     15,
     8
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ky-039",
    "heartbeat",
    "finger",
    "heart rate",
    "battito",
    "cardiaco"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-039 datasheet",
     "section": "IR LED and phototransistor through the finger; pins S, +, -. Signal is weak and noisy"
    }
   ]
  },
  {
   "id": "l293d-chip",
   "name": "L293D motor driver chip (DIP-16)",
   "category": "output",
   "pins": [
    {
     "name": "EN12",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin 1: enables channels 1 and 2 (PWM for speed)"
    },
    {
     "name": "1A",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin 2: input 1"
    },
    {
     "name": "1Y",
     "role": "passive",
     "notes": "Pin 3: output 1, to the motor"
    },
    {
     "name": "GND1",
     "role": "ground",
     "notes": "Pins 4, 5, 12, 13 are ground and heat sink"
    },
    {
     "name": "GND2",
     "role": "ground"
    },
    {
     "name": "2Y",
     "role": "passive",
     "notes": "Pin 6: output 2, to the motor"
    },
    {
     "name": "2A",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin 7: input 2"
    },
    {
     "name": "VCC2",
     "role": "passive",
     "notes": "Pin 8: motor supply 4.5 to 36 V"
    },
    {
     "name": "EN34",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin 9: enables channels 3 and 4"
    },
    {
     "name": "3A",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin 10: input 3"
    },
    {
     "name": "3Y",
     "role": "passive",
     "notes": "Pin 11: output 3"
    },
    {
     "name": "GND3",
     "role": "ground"
    },
    {
     "name": "GND4",
     "role": "ground"
    },
    {
     "name": "4Y",
     "role": "passive",
     "notes": "Pin 14: output 4"
    },
    {
     "name": "4A",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin 15: input 4"
    },
    {
     "name": "VCC1",
     "role": "power",
     "notes": "Pin 16: logic supply 4.5 to 7 V: use VIN. Inputs accept 3.3 V"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "chip",
    "size": [
     41.6,
     6.4,
     4
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "l293d",
    "motor driver",
    "h-bridge",
    "dip-16",
    "dc motor",
    "ponte h"
   ],
   "sources": [
    {
     "title": "Texas Instruments L293D datasheet",
     "section": "Pin functions; VCC1 4.5 to 7 V, input HIGH from 2.3 V; 600 mA per channel"
    }
   ]
  },
  {
   "id": "l298n-driver",
   "name": "L298N dual motor driver",
   "category": "output",
   "pins": [
    {
     "name": "ENA",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor A speed (PWM). Remove the jumper to use it"
    },
    {
     "name": "IN1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor A direction"
    },
    {
     "name": "IN2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor A direction"
    },
    {
     "name": "IN3",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B direction"
    },
    {
     "name": "IN4",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B direction"
    },
    {
     "name": "ENB",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B speed (PWM). Remove the jumper to use it"
    },
    {
     "name": "12V",
     "role": "passive",
     "notes": "Motor supply 5 to 35 V from a separate supply"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Share it with the motor supply and the ESP32 GND"
    },
    {
     "name": "5V",
     "role": "passive",
     "notes": "5 V output of the on-board regulator (jumper on, supply up to 12 V)"
    },
    {
     "name": "OUT1",
     "role": "passive",
     "notes": "Motor A"
    },
    {
     "name": "OUT2",
     "role": "passive",
     "notes": "Motor A"
    },
    {
     "name": "OUT3",
     "role": "passive",
     "notes": "Motor B"
    },
    {
     "name": "OUT4",
     "role": "passive",
     "notes": "Motor B"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     43,
     43,
     27
    ],
    "color": "#B22222"
   },
   "keywords": [
    "l298n",
    "motor driver",
    "h-bridge",
    "dc motor",
    "driver motore",
    "ponte h"
   ],
   "sources": [
    {
     "title": "ST L298 datasheet",
     "section": "Logic inputs: HIGH level from 2.3 V; about 2 V drop across the bridge"
    }
   ]
  },
  {
   "id": "l9110s-driver",
   "name": "L9110S dual motor driver",
   "category": "output",
   "pins": [
    {
     "name": "B-IA",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B input A (PWM)"
    },
    {
     "name": "B-IB",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B input B (direction)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "2.5 to 12 V, also feeds the motors. Use a separate supply for anything but tiny motors"
    },
    {
     "name": "A-IA",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor A input A (PWM)"
    },
    {
     "name": "A-IB",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor A input B (direction)"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     29,
     23,
     12
    ],
    "color": "#B22222"
   },
   "keywords": [
    "l9110s",
    "hg7881",
    "motor driver",
    "h-bridge",
    "driver motore"
   ],
   "sources": [
    {
     "title": "ASIC L9110 datasheet",
     "section": "Supply 2.5 to 12 V; 800 mA continuous per channel"
    }
   ]
  },
  {
   "id": "laser-ky008",
   "name": "Laser module (KY-008)",
   "category": "output",
   "pins": [
    {
     "name": "S",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "HIGH = laser on. Never look into the beam"
    },
    {
     "name": "MID",
     "role": "passive",
     "notes": "Middle pin: not connected on many boards"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked - on the board"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     18.5,
     15,
     8
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ky-008",
    "laser",
    "laser diode",
    "pointer",
    "laser rosso"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-008 datasheet",
     "section": "650 nm laser diode with resistor"
    }
   ]
  },
  {
   "id": "lcd12864-st7920",
   "name": "LCD 128x64 ST7920 (serial mode)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "5 V: use VIN"
    },
    {
     "name": "V0",
     "role": "passive",
     "notes": "Contrast. Many boards have a trimmer on the back instead"
    },
    {
     "name": "RS",
     "role": "spi_cs",
     "notes": "Serial mode: chip select (CS), active HIGH"
    },
    {
     "name": "R/W",
     "role": "spi_mosi",
     "notes": "Serial mode: data in (SID). A level shifter to 5 V makes it reliable"
    },
    {
     "name": "E",
     "role": "spi_sck",
     "notes": "Serial mode: clock (SCLK)"
    },
    {
     "name": "DB0",
     "role": "passive",
     "notes": "Parallel mode only"
    },
    {
     "name": "DB1",
     "role": "passive",
     "notes": "Parallel mode only"
    },
    {
     "name": "DB2",
     "role": "passive",
     "notes": "Parallel mode only"
    },
    {
     "name": "DB3",
     "role": "passive",
     "notes": "Parallel mode only"
    },
    {
     "name": "DB4",
     "role": "passive",
     "notes": "Parallel mode only"
    },
    {
     "name": "DB5",
     "role": "passive",
     "notes": "Parallel mode only"
    },
    {
     "name": "DB6",
     "role": "passive",
     "notes": "Parallel mode only"
    },
    {
     "name": "DB7",
     "role": "passive",
     "notes": "Parallel mode only"
    },
    {
     "name": "PSB",
     "role": "ground",
     "notes": "LOW selects serial mode: connect to GND"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Not connected"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW. Can also be tied HIGH"
    },
    {
     "name": "VOUT",
     "role": "passive",
     "notes": "Contrast voltage output. Leave unconnected"
    },
    {
     "name": "BLA",
     "role": "passive",
     "notes": "Backlight anode: to 5 V"
    },
    {
     "name": "BLK",
     "role": "passive",
     "notes": "Backlight cathode: to GND"
    }
   ],
   "bus": "spi",
   "voltage": "5",
   "model": {
    "shape": "oled",
    "size": [
     80,
     70,
     12
    ],
    "color": "#2E6FD8"
   },
   "keywords": [
    "st7920",
    "12864",
    "128x64",
    "lcd",
    "graphic lcd",
    "display grafico",
    "reprap"
   ],
   "sources": [
    {
     "title": "Sitronix ST7920 datasheet",
     "section": "Serial interface: CS (RS), SID (R/W), SCLK (E); PSB LOW selects serial"
    }
   ]
  },
  {
   "id": "lcd1602-parallel",
   "name": "LCD 16x2 (parallel, 16 pins)",
   "category": "display",
   "pins": [
    {
     "name": "VSS",
     "role": "ground"
    },
    {
     "name": "VDD",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "V0",
     "role": "passive",
     "notes": "Contrast: to the middle of a 10 kΩ potentiometer"
    },
    {
     "name": "RS",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Register select"
    },
    {
     "name": "RW",
     "role": "ground",
     "notes": "Tie to GND (write only), so the LCD never drives 5 V into the ESP32"
    },
    {
     "name": "E",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Enable"
    },
    {
     "name": "D0",
     "role": "passive",
     "notes": "Not used in 4-bit mode"
    },
    {
     "name": "D1",
     "role": "passive",
     "notes": "Not used in 4-bit mode"
    },
    {
     "name": "D2",
     "role": "passive",
     "notes": "Not used in 4-bit mode"
    },
    {
     "name": "D3",
     "role": "passive",
     "notes": "Not used in 4-bit mode"
    },
    {
     "name": "D4",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "D5",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "D6",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "D7",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A",
     "role": "passive",
     "notes": "Backlight anode: to 5 V (most modules have a resistor)"
    },
    {
     "name": "K",
     "role": "passive",
     "notes": "Backlight cathode: to GND"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     80,
     36,
     13
    ],
    "color": "#2E6FD8"
   },
   "keywords": [
    "lcd1602",
    "lcd",
    "16x2",
    "hd44780",
    "parallel",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Hitachi HD44780U datasheet",
     "section": "Pin functions RS, R/W, E, DB0-DB7; 4-bit interface"
    },
    {
     "title": "Generic 1602 LCD module datasheet",
     "section": "Pin 1 VSS to 16 K"
    }
   ]
  },
  {
   "id": "lcd1602-i2c",
   "name": "LCD 16x2 with I2C backpack",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for good contrast: use VIN"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "The backpack pulls SDA up to 5 V. Usually works; a level shifter is safer"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "The backpack pulls SCL up to 5 V. Usually works; a level shifter is safer"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x20",
    "0x21",
    "0x22",
    "0x23",
    "0x24",
    "0x25",
    "0x26",
    "0x27",
    "0x38",
    "0x39",
    "0x3A",
    "0x3B",
    "0x3C",
    "0x3D",
    "0x3E",
    "0x3F"
   ],
   "voltage": "5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     80,
     36,
     20
    ],
    "color": "#2E6FD8"
   },
   "keywords": [
    "lcd1602",
    "lcd",
    "16x2",
    "i2c backpack",
    "pcf8574",
    "hd44780",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "NXP PCF8574 / PCF8574A datasheet",
     "section": "Address 0x20 to 0x27 (PCF8574T) or 0x38 to 0x3F (PCF8574AT) via A0-A2; most backpacks ship as 0x27 or 0x3F"
    },
    {
     "title": "Hitachi HD44780U datasheet",
     "section": "Supply 5 V for standard character LCDs"
    }
   ]
  },
  {
   "id": "lcd2004-i2c",
   "name": "LCD 20x4 with I2C backpack",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for good contrast: use VIN"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "The backpack pulls SDA up to 5 V. Usually works; a level shifter is safer"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "The backpack pulls SCL up to 5 V. Usually works; a level shifter is safer"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x20",
    "0x21",
    "0x22",
    "0x23",
    "0x24",
    "0x25",
    "0x26",
    "0x27",
    "0x38",
    "0x39",
    "0x3A",
    "0x3B",
    "0x3C",
    "0x3D",
    "0x3E",
    "0x3F"
   ],
   "voltage": "5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     80,
     60,
     20
    ],
    "color": "#2E6FD8"
   },
   "keywords": [
    "lcd2004",
    "lcd",
    "20x4",
    "i2c backpack",
    "pcf8574",
    "hd44780",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "NXP PCF8574 / PCF8574A datasheet",
     "section": "Address 0x20 to 0x27 (PCF8574T) or 0x38 to 0x3F (PCF8574AT) via A0-A2; most backpacks ship as 0x27 or 0x3F"
    },
    {
     "title": "Hitachi HD44780U datasheet",
     "section": "Supply 5 V for standard character LCDs"
    }
   ]
  },
  {
   "id": "led-bar-10",
   "name": "LED bar graph 10 segments",
   "category": "display",
   "pins": [
    {
     "name": "A1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Anode, through a 220 Ω resistor. Which side is anode varies: check with a multimeter (diode mode)"
    },
    {
     "name": "A2",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A3",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A4",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A5",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A6",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A7",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A8",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A9",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A10",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "K1",
     "role": "ground",
     "notes": "Cathode: to GND"
    },
    {
     "name": "K2",
     "role": "ground"
    },
    {
     "name": "K3",
     "role": "ground"
    },
    {
     "name": "K4",
     "role": "ground"
    },
    {
     "name": "K5",
     "role": "ground"
    },
    {
     "name": "K6",
     "role": "ground"
    },
    {
     "name": "K7",
     "role": "ground"
    },
    {
     "name": "K8",
     "role": "ground"
    },
    {
     "name": "K9",
     "role": "ground"
    },
    {
     "name": "K10",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "led",
    "size": [
     51.8,
     10,
     8
    ],
    "color": "#B22222"
   },
   "keywords": [
    "led bar",
    "bar graph",
    "10 segment",
    "vu meter",
    "barra led",
    "indicatore"
   ],
   "sources": [
    {
     "title": "Kingbright DC-10 series bar graph datasheet",
     "section": "Pin connection (anodes one side, cathodes the other)"
    }
   ]
  },
  {
   "id": "led-resistor",
   "name": "LED with 220 Ω resistor",
   "category": "output",
   "pins": [
    {
     "name": "A",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Anode (long leg), through the resistor to a GPIO"
    },
    {
     "name": "K",
     "role": "ground",
     "notes": "Cathode (short leg, flat side)"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "led",
    "size": [
     5,
     5,
     8.6
    ],
    "color": "#FF4D4D"
   },
   "keywords": [
    "led",
    "light",
    "diode",
    "resistor",
    "blink"
   ],
   "sources": [
    {
     "title": "Generic 5 mm LED",
     "section": "Forward voltage about 2 V (red); 220 Ω at 3.3 V gives about 6 mA"
    }
   ],
   "starterSketch": "led"
  },
  {
   "id": "ldr-module",
   "name": "Light sensor module (LDR + LM393)",
   "category": "sensor",
   "measures": [
    "light"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3 so AO stays within the ADC range"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "HIGH/LOW when light crosses the threshold set with the trimmer"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     32,
     14,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ldr",
    "photoresistor",
    "light",
    "lm393",
    "fotoresistenza",
    "luce"
   ],
   "sources": [
    {
     "title": "Texas Instruments LM393 datasheet",
     "section": "Open-collector comparator output"
    },
    {
     "title": "Espressif ESP32 Technical Reference Manual",
     "section": "ADC: input range and attenuation"
    }
   ]
  },
  {
   "id": "limit-switch",
   "name": "Limit switch (micro switch)",
   "category": "input",
   "pins": [
    {
     "name": "COM",
     "role": "ground"
    },
    {
     "name": "NO",
     "role": "digital_out",
     "notes": "Normally open. To a GPIO with INPUT_PULLUP: LOW when pressed"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Normally closed. Leave unconnected"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "button",
    "size": [
     20,
     10,
     6.4
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "limit switch",
    "micro switch",
    "endstop",
    "finecorsa",
    "microinterruttore"
   ],
   "sources": [
    {
     "title": "Arduino reference",
     "section": "pinMode INPUT_PULLUP"
    }
   ]
  },
  {
   "id": "lis2dh12",
   "name": "LIS2DH12 low-power accelerometer",
   "category": "sensor",
   "measures": [
    "acceleration",
    "motion"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3. Pin order differs between sellers: check the silkscreen"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "Address select: LOW = 0x18, HIGH = 0x19"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "Must be HIGH for I2C. Most boards pull it up already"
    },
    {
     "name": "INT1",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "INT2",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x18",
    "0x19"
   ],
   "idCheck": {
    "register": "0x0F",
    "expect": "0x33"
   },
   "voltage": "3.3",
   "model": {
    "shape": "breakout",
    "size": [
     21.3,
     15,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "lis2dh12",
    "st",
    "accelerometer",
    "low power",
    "motion",
    "accelerometro"
   ],
   "sources": [
    {
     "title": "ST LIS2DH12 datasheet",
     "section": "Register 0x0F WHO_AM_I (reads 0x33)"
    },
    {
     "title": "ST LIS2DH12 datasheet",
     "section": "I2C address 0x18 / 0x19 with SDO/SA0; supply 1.71 to 3.6 V"
    }
   ]
  },
  {
   "id": "lis3dh",
   "name": "LIS3DH accelerometer",
   "category": "sensor",
   "measures": [
    "acceleration"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "Address select: LOW = 0x18, HIGH = 0x19"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "HIGH (or unconnected on most boards) selects I2C"
    },
    {
     "name": "INT1",
     "role": "int"
    },
    {
     "name": "INT2",
     "role": "int"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x18",
    "0x19"
   ],
   "idCheck": {
    "register": "0x0F",
    "expect": "0x33"
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     21.3,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "lis3dh",
    "st",
    "accelerometer",
    "acceleration",
    "accelerometro"
   ],
   "sources": [
    {
     "title": "ST LIS3DH datasheet",
     "section": "Register 0x0F WHO_AM_I (reads 0x33)"
    },
    {
     "title": "ST LIS3DH datasheet",
     "section": "I2C: SA0 (SDO) LOW 0x18, HIGH 0x19"
    }
   ]
  },
  {
   "id": "lis3mdl",
   "name": "LIS3MDL 3-axis magnetometer",
   "category": "sensor",
   "measures": [
    "magnetic field",
    "heading"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "Output of the on-board 3.3 V regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "DO",
     "role": "passive",
     "notes": "Address select (SDO): LOW = 0x1C, HIGH = 0x1E"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "SPI chip select. Leave unconnected or HIGH for I2C"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "DRDY",
     "role": "int",
     "notes": "Data ready, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x1C",
    "0x1E"
   ],
   "idCheck": {
    "register": "0x0F",
    "expect": "0x3d"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "lis3mdl",
    "st",
    "magnetometer",
    "compass",
    "bussola",
    "magnetometro"
   ],
   "sources": [
    {
     "title": "ST LIS3MDL datasheet",
     "section": "Register 0x0F WHO_AM_I (reads 0x3D)"
    },
    {
     "title": "ST LIS3MDL datasheet",
     "section": "I2C address 0x1C (SDO/SA1 LOW) / 0x1E (HIGH)"
    }
   ]
  },
  {
   "id": "lj12a3-4-z-bx",
   "name": "LJ12A3-4-Z/BX inductive proximity switch (NPN)",
   "category": "sensor",
   "measures": [
    "proximity",
    "presence"
   ],
   "pins": [
    {
     "name": "BROWN",
     "role": "passive",
     "notes": "Supply + from an external 6 to 36 V supply (e.g. 12 V). Never to the ESP32"
    },
    {
     "name": "BLUE",
     "role": "ground",
     "notes": "Supply 0 V. Connect to ESP32 GND too (common ground)"
    },
    {
     "name": "BLACK",
     "role": "digital_out",
     "notes": "NPN output, LOW near metal. Some units pull it up to the supply: measure first, use an optocoupler or divider"
    }
   ],
   "bus": "gpio",
   "voltage": "6-36",
   "model": {
    "shape": "module",
    "size": [
     12,
     12,
     60
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "lj12a3",
    "inductive",
    "proximity switch",
    "metal",
    "npn",
    "induttivo",
    "finecorsa",
    "metallo"
   ],
   "sources": [
    {
     "title": "LJ12A3-4-Z/BX seller datasheet",
     "section": "Supply 6 to 36 V DC; NPN NO output; detects metal at 4 mm; brown +, blue 0 V, black signal"
    }
   ]
  },
  {
   "id": "ljc18a3-h-z-bx",
   "name": "LJC18A3-H-Z/BX capacitive proximity switch (NPN)",
   "category": "sensor",
   "measures": [
    "proximity",
    "presence"
   ],
   "pins": [
    {
     "name": "BROWN",
     "role": "passive",
     "notes": "Supply + from an external 6 to 36 V supply (e.g. 12 V). Never to the ESP32"
    },
    {
     "name": "BLUE",
     "role": "ground",
     "notes": "Supply 0 V. Connect to ESP32 GND too (common ground)"
    },
    {
     "name": "BLACK",
     "role": "digital_out",
     "notes": "NPN output, LOW when an object is near. Some units pull it up to the supply: measure first, use an optocoupler or divider"
    }
   ],
   "bus": "gpio",
   "voltage": "6-36",
   "model": {
    "shape": "module",
    "size": [
     18,
     18,
     70
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "ljc18a3",
    "capacitive",
    "proximity switch",
    "level",
    "npn",
    "capacitivo",
    "livello"
   ],
   "sources": [
    {
     "title": "LJC18A3-H-Z/BX seller datasheet",
     "section": "Supply 6 to 36 V DC; NPN NO output; range 1 to 10 mm (adjustable); brown +, blue 0 V, black signal"
    }
   ]
  },
  {
   "id": "lm2596-buck",
   "name": "LM2596 buck converter (adjustable)",
   "category": "output",
   "pins": [
    {
     "name": "IN+",
     "role": "passive",
     "notes": "Input 4.5 to 40 V"
    },
    {
     "name": "IN-",
     "role": "ground",
     "notes": "Input ground, same as OUT-"
    },
    {
     "name": "OUT+",
     "role": "passive",
     "notes": "Adjustable 1.25 to 35 V. Set 5 V with the screw BEFORE wiring it to VIN"
    },
    {
     "name": "OUT-",
     "role": "ground",
     "notes": "To the ESP32 GND"
    }
   ],
   "bus": "gpio",
   "voltage": "4.5-40",
   "model": {
    "shape": "module",
    "size": [
     43,
     21,
     14
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "lm2596",
    "buck",
    "step down",
    "dc-dc",
    "regulator",
    "alimentatore",
    "riduttore di tensione"
   ],
   "sources": [
    {
     "title": "Texas Instruments LM2596 datasheet",
     "section": "Input up to 40 V; 3 A output; adjustable 1.23 V reference"
    }
   ]
  },
  {
   "id": "lm35",
   "name": "LM35 analog temperature sensor",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "+VS",
     "role": "power",
     "notes": "Left leg, flat side facing you. Needs at least 4 V: use VIN (5 V)"
    },
    {
     "name": "VOUT",
     "role": "analog_out",
     "notes": "Middle leg. 10 mV per °C, 0 mV at 0 °C. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Right leg"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "chip",
    "size": [
     8.6,
     4,
     5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "lm35",
    "analog",
    "temperature",
    "to-92",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Texas Instruments LM35 datasheet",
     "section": "Pin configuration (TO-92) and 10 mV/°C scale factor"
    },
    {
     "title": "Texas Instruments LM35 datasheet",
     "section": "Supply 4 to 30 V"
    }
   ]
  },
  {
   "id": "speed-sensor-fc03",
   "name": "LM393 slotted optical speed sensor (FC-03)",
   "category": "sensor",
   "measures": [
    "rotation",
    "speed"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3 so DO stays at 3.3 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Pulse each time the slot is blocked. Count with an interrupt"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Raw light level. Optional. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     32,
     14,
     12
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "fc-03",
    "lm393",
    "speed sensor",
    "optical encoder",
    "slot",
    "tachometer",
    "velocità",
    "encoder"
   ],
   "sources": [
    {
     "title": "Texas Instruments LM393 datasheet",
     "section": "Comparator output (open collector with pull-up on the module)"
    }
   ]
  },
  {
   "id": "lm75a",
   "name": "LM75A temperature (CJMCU-75)",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3 so the I2C lines stay at 3.3 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "OS",
     "role": "int",
     "notes": "Over-temperature output (open drain), optional"
    },
    {
     "name": "A0",
     "role": "passive",
     "notes": "Address bit 0. Check the board: some leave A0 to A2 floating"
    },
    {
     "name": "A1",
     "role": "passive",
     "notes": "Address bit 1"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Address bit 2"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x48",
    "0x49",
    "0x4A",
    "0x4B",
    "0x4C",
    "0x4D",
    "0x4E",
    "0x4F"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "breakout",
    "size": [
     21.4,
     14,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "lm75a",
    "lm75",
    "cjmcu-75",
    "nxp",
    "temperature",
    "temperatura"
   ],
   "sources": [
    {
     "title": "NXP LM75A datasheet",
     "section": "Slave address 1001 A2 A1 A0 = 0x48 to 0x4F; supply 2.8 to 5.5 V"
    },
    {
     "title": "NXP LM75A datasheet",
     "section": "No ID register; the pin order here is one common board layout"
    }
   ]
  },
  {
   "id": "bss138-level-shifter",
   "name": "Logic level converter 4 channels (BSS138)",
   "category": "output",
   "pins": [
    {
     "name": "LV1",
     "role": "passive",
     "notes": "Low-voltage (3.3 V) side, channel 1. Bidirectional: to an ESP32 GPIO"
    },
    {
     "name": "LV2",
     "role": "passive",
     "notes": "Low-voltage side, channel 2"
    },
    {
     "name": "LV",
     "role": "power",
     "notes": "3V3"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "LV3",
     "role": "passive",
     "notes": "Low-voltage side, channel 3"
    },
    {
     "name": "LV4",
     "role": "passive",
     "notes": "Low-voltage side, channel 4"
    },
    {
     "name": "HV1",
     "role": "passive",
     "notes": "High-voltage (5 V) side, channel 1"
    },
    {
     "name": "HV2",
     "role": "passive",
     "notes": "High-voltage side, channel 2"
    },
    {
     "name": "HV",
     "role": "passive",
     "notes": "5 V: to VIN or the 5 V supply"
    },
    {
     "name": "GND2",
     "role": "ground",
     "notes": "Second GND pad on the high-voltage side"
    },
    {
     "name": "HV3",
     "role": "passive",
     "notes": "High-voltage side, channel 3"
    },
    {
     "name": "HV4",
     "role": "passive",
     "notes": "High-voltage side, channel 4. Slow edges: fine for I2C, too slow for WS2812"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "breakout",
    "size": [
     31.5,
     13,
     3
    ],
    "color": "#B22222"
   },
   "keywords": [
    "level shifter",
    "level converter",
    "bss138",
    "3.3v 5v",
    "bidirectional",
    "traslatore di livello"
   ],
   "sources": [
    {
     "title": "SparkFun Logic Level Converter (BOB-12009) hookup guide",
     "section": "LV and HV sides, BSS138 with 10 kΩ pull-ups"
    },
    {
     "title": "NXP AN10441 level shifting in I2C-bus systems",
     "section": "MOSFET bidirectional level shifter"
    }
   ]
  },
  {
   "id": "lora-ra02",
   "name": "LoRa SX1278 (Ai-Thinker Ra-02)",
   "category": "output",
   "pins": [
    {
     "name": "3.3V",
     "role": "power",
     "notes": "3.3 V only"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "NSS",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "DIO0",
     "role": "int",
     "notes": "Interrupt (TX/RX done)"
    },
    {
     "name": "DIO1",
     "role": "int",
     "notes": "Optional"
    },
    {
     "name": "ANT",
     "role": "passive",
     "notes": "Antenna. Always connect an antenna before transmitting"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     26.4,
     16,
     3
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "lora",
    "sx1278",
    "ra-02",
    "rfm95",
    "433 mhz",
    "long range",
    "radio"
   ],
   "sources": [
    {
     "title": "Semtech SX1276/77/78/79 datasheet",
     "section": "SPI interface; DIO0 mapping"
    },
    {
     "title": "Ai-Thinker Ra-02 specification",
     "section": "Supply 1.8 to 3.7 V"
    }
   ]
  },
  {
   "id": "encoder-lpd3806-600",
   "name": "LPD3806 incremental encoder 600 P/R (A/B)",
   "category": "input",
   "measures": [
    "rotation",
    "position",
    "speed"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire. Needs 5 to 24 V: use VIN (5 V)"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    },
    {
     "name": "A",
     "role": "digital_out",
     "notes": "Green wire. NPN open collector: use INPUT_PULLUP or 4.7 kΩ to 3V3, never to VCC"
    },
    {
     "name": "B",
     "role": "digital_out",
     "notes": "White wire. NPN open collector: use INPUT_PULLUP or 4.7 kΩ to 3V3, never to VCC"
    },
    {
     "name": "SHIELD",
     "role": "passive",
     "notes": "Bare wire. Leave unconnected or tie to GND"
    }
   ],
   "bus": "gpio",
   "voltage": "5-24",
   "model": {
    "shape": "motor",
    "size": [
     38,
     38,
     36
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "lpd3806",
    "encoder",
    "incremental encoder",
    "600 p/r",
    "quadrature",
    "encoder incrementale",
    "giri"
   ],
   "sources": [
    {
     "title": "LPD3806-600BM-G5-24C seller datasheet",
     "section": "Supply 5 to 24 V DC; NPN open-collector A/B outputs; 600 pulses per revolution"
    }
   ]
  },
  {
   "id": "lsm6ds3",
   "name": "LSM6DS3 accelerometer + gyro",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SDO",
     "role": "passive",
     "notes": "Address select: LOW = 0x6A, HIGH = 0x6B"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "HIGH selects I2C"
    },
    {
     "name": "INT1",
     "role": "int"
    },
    {
     "name": "INT2",
     "role": "int"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x6A",
    "0x6B"
   ],
   "idCheck": {
    "register": "0x0F",
    "expect": "0x69",
    "otherValues": {
     "0x6a": "This is an LSM6DS3TR-C: very similar, use a library that supports it."
    }
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     21.3,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "lsm6ds3",
    "lsm6ds3tr-c",
    "imu",
    "accelerometer",
    "gyro",
    "giroscopio"
   ],
   "sources": [
    {
     "title": "ST LSM6DS3 datasheet",
     "section": "Register 0x0F WHO_AM_I (reads 0x69)"
    },
    {
     "title": "ST LSM6DS3 datasheet",
     "section": "I2C: SDO/SA0 LOW 0x6A, HIGH 0x6B"
    }
   ]
  },
  {
   "id": "lsm6dsox",
   "name": "LSM6DSOX accelerometer + gyro",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "Output of the on-board 3.3 V regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "DO",
     "role": "passive",
     "notes": "Address select (SDO): LOW = 0x6A, HIGH = 0x6B"
    },
    {
     "name": "CS",
     "role": "passive",
     "notes": "SPI chip select. Leave unconnected or HIGH for I2C"
    },
    {
     "name": "I1",
     "role": "int",
     "notes": "Interrupt 1, optional"
    },
    {
     "name": "I2",
     "role": "int",
     "notes": "Interrupt 2, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x6A",
    "0x6B"
   ],
   "idCheck": {
    "register": "0x0F",
    "expect": "0x6c"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "lsm6dsox",
    "st",
    "imu",
    "accelerometer",
    "gyro",
    "giroscopio"
   ],
   "sources": [
    {
     "title": "ST LSM6DSOX datasheet",
     "section": "Register 0x0F WHO_AM_I (reads 0x6C)"
    },
    {
     "title": "ST LSM6DSOX datasheet",
     "section": "I2C address 0x6A (SDO LOW) / 0x6B (SDO HIGH)"
    }
   ]
  },
  {
   "id": "lsm9ds1",
   "name": "LSM9DS1 9-axis IMU breakout",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation",
    "magnetic field",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "Adafruit-style pin order. SparkFun boards use other names and order"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "Output of the on-board 3.3 V regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "CSAG",
     "role": "passive",
     "notes": "Accel/gyro SPI select. Leave unconnected for I2C"
    },
    {
     "name": "CSM",
     "role": "passive",
     "notes": "Magnetometer SPI select. Leave unconnected for I2C"
    },
    {
     "name": "SDOAG",
     "role": "passive",
     "notes": "Accel/gyro address: HIGH = 0x6B, LOW = 0x6A"
    },
    {
     "name": "SDOM",
     "role": "passive",
     "notes": "Magnetometer address: HIGH = 0x1E, LOW = 0x1C"
    },
    {
     "name": "INT1",
     "role": "int",
     "notes": "Accel/gyro interrupt, optional"
    },
    {
     "name": "INT2",
     "role": "int",
     "notes": "Accel/gyro interrupt, optional"
    },
    {
     "name": "INTM",
     "role": "int",
     "notes": "Magnetometer interrupt, optional"
    },
    {
     "name": "DRDY",
     "role": "int",
     "notes": "Magnetometer data ready, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x6B",
    "0x6A",
    "0x1E",
    "0x1C"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     34,
     20,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "lsm9ds1",
    "st",
    "imu",
    "9dof",
    "accelerometer",
    "gyro",
    "magnetometer",
    "giroscopio"
   ],
   "sources": [
    {
     "title": "ST LSM9DS1 datasheet",
     "section": "WHO_AM_I 0x0F: accel/gyro reads 0x68, magnetometer reads 0x3D (two I2C devices)"
    },
    {
     "title": "ST LSM9DS1 datasheet",
     "section": "I2C addresses: accel/gyro 0x6A/0x6B, magnetometer 0x1C/0x1E"
    }
   ]
  },
  {
   "id": "ltr390",
   "name": "LTR-390 UV + ambient light",
   "category": "sensor",
   "measures": [
    "uv",
    "light"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x53"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ltr390",
    "ltr-390uv",
    "liteon",
    "uv",
    "uv index",
    "ultravioletti",
    "luce"
   ],
   "sources": [
    {
     "title": "Lite-On LTR-390UV-01 datasheet",
     "section": "I2C address 0x53; UVS and ALS modes"
    },
    {
     "title": "Adafruit LTR390 guide",
     "section": "Pinout VIN, 3Vo, GND, SCL, SDA, INT"
    }
   ]
  },
  {
   "id": "max30100",
   "name": "MAX30100 heart rate + SpO2",
   "category": "sensor",
   "measures": [
    "heart rate",
    "blood oxygen"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "Many purple boards pull SCL up to 1.8 V only: the ESP32 may not read it"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "Many purple boards pull SDA up to 1.8 V only: the ESP32 may not read it"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "IRD",
     "role": "passive",
     "notes": "IR LED output. Leave unconnected"
    },
    {
     "name": "RD",
     "role": "passive",
     "notes": "Red LED output. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x57"
   ],
   "idCheck": {
    "register": "0xFF",
    "expect": "0x11"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     19,
     14,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "max30100",
    "gy-max30100",
    "rcwl-0530",
    "heart rate",
    "spo2",
    "oximeter",
    "battito",
    "ossimetro"
   ],
   "sources": [
    {
     "title": "Maxim MAX30100 datasheet",
     "section": "Register 0xFF Part ID (reads 0x11); I2C address 0x57"
    },
    {
     "title": "Maxim MAX30100 datasheet",
     "section": "Chip supply 1.8 V plus 3.3 V for the LEDs; boards regulate both"
    }
   ]
  },
  {
   "id": "max30102",
   "name": "MAX30102 heart rate + SpO2",
   "category": "sensor",
   "measures": [
    "heart rate",
    "blood oxygen"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "INT",
     "role": "int"
    },
    {
     "name": "IRD",
     "role": "passive",
     "notes": "IR LED output. Leave unconnected"
    },
    {
     "name": "RD",
     "role": "passive",
     "notes": "Red LED output. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x57"
   ],
   "idCheck": {
    "register": "0xFF",
    "expect": "0x15"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "max30102",
    "max30100",
    "heart rate",
    "pulse",
    "spo2",
    "oximeter",
    "battito",
    "ossimetro"
   ],
   "sources": [
    {
     "title": "Maxim MAX30102 datasheet",
     "section": "Register 0xFF Part ID (reads 0x15)"
    },
    {
     "title": "Maxim MAX30102 datasheet",
     "section": "I2C address 0x57 (0xAE write / 0xAF read)"
    }
   ]
  },
  {
   "id": "max31855",
   "name": "MAX31855 K-type thermocouple breakout",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "spi_miso",
     "notes": "Data out (SPI MISO)"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "CLK",
     "role": "spi_sck"
    },
    {
     "name": "T+",
     "role": "passive",
     "notes": "Thermocouple + (yellow for K-type)"
    },
    {
     "name": "T-",
     "role": "passive",
     "notes": "Thermocouple - (red for K-type)"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "breakout",
    "size": [
     20,
     25,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "max31855",
    "thermocouple",
    "k-type",
    "termocoppia",
    "temperature",
    "spi"
   ],
   "sources": [
    {
     "title": "Maxim MAX31855 datasheet",
     "section": "Serial interface: SO, CS, SCK (read-only SPI)"
    },
    {
     "title": "Maxim MAX31855 datasheet",
     "section": "Supply 3.0 to 3.6 V"
    }
   ]
  },
  {
   "id": "max31856",
   "name": "MAX31856 universal thermocouple amplifier",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "SDO",
     "role": "spi_miso",
     "notes": "Data out of the module (SPI MISO)"
    },
    {
     "name": "SDI",
     "role": "spi_mosi",
     "notes": "Data into the module (SPI MOSI)"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "FLT",
     "role": "int",
     "notes": "Fault output (open drain, active LOW), optional"
    },
    {
     "name": "DRDY",
     "role": "int",
     "notes": "Data ready (active LOW), optional"
    },
    {
     "name": "T+",
     "role": "passive",
     "notes": "Thermocouple + (screw terminal)"
    },
    {
     "name": "T-",
     "role": "passive",
     "notes": "Thermocouple - (screw terminal)"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     29,
     25,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "max31856",
    "thermocouple",
    "k-type",
    "j-type",
    "termocoppia",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Maxim MAX31856 datasheet",
     "section": "Thermocouple types B, E, J, K, N, R, S, T; SPI modes 1 and 3"
    },
    {
     "title": "Adafruit MAX31856 guide",
     "section": "Pinout VIN, 3Vo, GND, SCK, SDO, SDI, CS, FLT, DRDY"
    }
   ]
  },
  {
   "id": "max31865",
   "name": "MAX31865 PT100/PT1000 RTD amplifier",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CLK",
     "role": "spi_sck"
    },
    {
     "name": "SDO",
     "role": "spi_miso",
     "notes": "Data out of the module (SPI MISO)"
    },
    {
     "name": "SDI",
     "role": "spi_mosi",
     "notes": "Data into the module (SPI MOSI)"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "RDY",
     "role": "int",
     "notes": "Data ready (active LOW), optional"
    },
    {
     "name": "F+",
     "role": "passive",
     "notes": "Force + screw terminal (4-wire RTD)"
    },
    {
     "name": "RTD+",
     "role": "passive",
     "notes": "RTD + screw terminal"
    },
    {
     "name": "RTD-",
     "role": "passive",
     "notes": "RTD - screw terminal"
    },
    {
     "name": "F-",
     "role": "passive",
     "notes": "Force - screw terminal. Set the 2/3/4-wire jumpers to match your probe"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     31.5,
     28,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "max31865",
    "pt100",
    "pt1000",
    "rtd",
    "platinum",
    "termoresistenza",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Maxim MAX31865 datasheet",
     "section": "SPI modes 1 and 3; reference resistor 430 Ω for PT100, 4.3 kΩ for PT1000"
    },
    {
     "title": "Adafruit MAX31865 guide",
     "section": "Pinout VIN, 3Vo, GND, CLK, SDO, SDI, CS, RDY; 2/3/4-wire jumpers"
    }
   ]
  },
  {
   "id": "max3232-rs232",
   "name": "MAX3232 RS232 to TTL module (DB9)",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.0 to 5.5 V"
    },
    {
     "name": "TXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "TTL input: connect to an ESP32 TX pin. Labels differ between sellers: if no data, swap TXD and RXD"
    },
    {
     "name": "RXD",
     "role": "digital_out",
     "notes": "TTL output: connect to an ESP32 RX pin"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     42,
     33,
     13
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "max3232",
    "rs232",
    "db9",
    "serial port",
    "com port",
    "seriale",
    "porta seriale"
   ],
   "sources": [
    {
     "title": "Texas Instruments MAX3232 datasheet",
     "section": "Supply 3 to 5.5 V; DIN/ROUT are the TTL side"
    },
    {
     "title": "Common MAX3232 DB9 modules",
     "section": "Header order and TX/RX labels vary: check the silkscreen"
    }
   ]
  },
  {
   "id": "max4466",
   "name": "MAX4466 microphone amplifier",
   "category": "sensor",
   "measures": [
    "sound"
   ],
   "pins": [
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "Audio centred at half the supply. Power from 3V3. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "breakout",
    "size": [
     19,
     13,
     6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "max4466",
    "microphone",
    "electret",
    "sound",
    "audio",
    "microfono",
    "suono"
   ],
   "sources": [
    {
     "title": "Maxim MAX4466 datasheet",
     "section": "Supply 2.4 to 5.5 V; rail-to-rail output"
    }
   ]
  },
  {
   "id": "max485",
   "name": "MAX485 RS-485 module",
   "category": "sensor",
   "pins": [
    {
     "name": "RO",
     "role": "digital_out",
     "notes": "Receiver out, 5 V when powered from 5 V: use a divider before the ESP32 RX pin"
    },
    {
     "name": "RE",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Receiver enable, active LOW. Usually tied to DE and driven by one GPIO"
    },
    {
     "name": "DE",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Driver enable, HIGH to transmit"
    },
    {
     "name": "DI",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Driver in. Connect to an ESP32 TX pin (3.3 V is a valid HIGH)"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "B",
     "role": "passive",
     "notes": "RS-485 line B. To the bus, never to the ESP32"
    },
    {
     "name": "A",
     "role": "passive",
     "notes": "RS-485 line A. To the bus, never to the ESP32"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     44,
     14,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "max485",
    "rs485",
    "rs-485",
    "modbus",
    "industrial",
    "transceiver",
    "industriale"
   ],
   "sources": [
    {
     "title": "Maxim MAX481/MAX483/MAX485 datasheet",
     "section": "Supply 4.75 to 5.25 V; RO, RE, DE, DI, A, B pin functions; input HIGH threshold 2.0 V"
    }
   ]
  },
  {
   "id": "max6675",
   "name": "MAX6675 K-type thermocouple module",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "SO",
     "role": "spi_miso",
     "notes": "Data out of the module (SPI MISO)"
    },
    {
     "name": "TC+",
     "role": "passive",
     "notes": "Thermocouple + (screw terminal)"
    },
    {
     "name": "TC-",
     "role": "passive",
     "notes": "Thermocouple - (screw terminal)"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     25,
     15,
     12
    ],
    "color": "#B22222"
   },
   "keywords": [
    "max6675",
    "thermocouple",
    "k-type",
    "termocoppia",
    "high temperature",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Maxim MAX6675 datasheet",
     "section": "Serial interface: SO, CS, SCK (read-only SPI)"
    },
    {
     "title": "Maxim MAX6675 datasheet",
     "section": "Supply 3.0 to 5.5 V"
    }
   ]
  },
  {
   "id": "max7219-7seg",
   "name": "MAX7219 8-digit 7-segment display",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "spi_mosi",
     "notes": "Data in"
    },
    {
     "name": "CS",
     "role": "spi_cs",
     "notes": "Load (CS)"
    },
    {
     "name": "CLK",
     "role": "spi_sck",
     "notes": "Clock"
    }
   ],
   "bus": "spi",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     80,
     15,
     12
    ],
    "color": "#B22222"
   },
   "keywords": [
    "max7219",
    "7 segment",
    "8 digit",
    "seven segment",
    "display 7 segmenti",
    "cifre"
   ],
   "sources": [
    {
     "title": "Maxim MAX7219 datasheet",
     "section": "Serial interface DIN, CLK, LOAD (CS)"
    }
   ]
  },
  {
   "id": "max7219-matrix",
   "name": "MAX7219 8x8 LED matrix",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "spi_mosi",
     "notes": "Data in. 3.3 V signals usually work, a level shifter is safer"
    },
    {
     "name": "CS",
     "role": "spi_cs",
     "notes": "Load (CS)"
    },
    {
     "name": "CLK",
     "role": "spi_sck",
     "notes": "Clock"
    }
   ],
   "bus": "spi",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     32,
     12
    ],
    "color": "#B22222"
   },
   "keywords": [
    "max7219",
    "led matrix",
    "8x8",
    "dot matrix",
    "matrice led",
    "display"
   ],
   "sources": [
    {
     "title": "Maxim MAX7219 datasheet",
     "section": "Serial interface DIN, CLK, LOAD (CS); supply 4 to 5.5 V"
    }
   ]
  },
  {
   "id": "max98357a-amp",
   "name": "MAX98357A I2S audio amplifier",
   "category": "output",
   "pins": [
    {
     "name": "LRC",
     "role": "spi_cs",
     "notes": "I2S word select (LRCLK), not SPI"
    },
    {
     "name": "BCLK",
     "role": "spi_sck",
     "notes": "I2S bit clock, not SPI"
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "I2S audio data from the ESP32"
    },
    {
     "name": "GAIN",
     "role": "passive",
     "notes": "Leave unconnected for 9 dB"
    },
    {
     "name": "SD",
     "role": "passive",
     "notes": "Shutdown / channel select. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VIN",
     "role": "power",
     "notes": "2.5 to 5.5 V; 5 V gives more volume"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "breakout",
    "size": [
     18.8,
     18,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "max98357a",
    "i2s",
    "amplifier",
    "speaker",
    "audio",
    "amplificatore",
    "altoparlante"
   ],
   "sources": [
    {
     "title": "Maxim MAX98357A datasheet",
     "section": "I2S inputs BCLK, LRCLK, DIN; supply 2.5 to 5.5 V"
    }
   ]
  },
  {
   "id": "fram-mb85rc256v",
   "name": "MB85RC256V I2C FRAM breakout (32 KB)",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "WP",
     "role": "passive",
     "notes": "Write protect: LOW (default) allows writing"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Address bit, pulled LOW"
    },
    {
     "name": "A1",
     "role": "passive"
    },
    {
     "name": "A0",
     "role": "passive"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x50",
    "0x51",
    "0x52",
    "0x53",
    "0x54",
    "0x55",
    "0x56",
    "0x57"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     21.3,
     18,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mb85rc256v",
    "fram",
    "fujitsu",
    "non-volatile",
    "memory",
    "storage",
    "memoria"
   ],
   "sources": [
    {
     "title": "Fujitsu MB85RC256V datasheet",
     "section": "Device address 1010 A2 A1 A0 (0x50 to 0x57); supply 2.7 to 5.5 V; 10^12 write cycles"
    },
    {
     "title": "Adafruit I2C FRAM breakout guide",
     "section": "Pinouts. Order differs between boards: check the silkscreen"
    }
   ]
  },
  {
   "id": "mcp23008-expander",
   "name": "MCP23008 8-bit I/O expander (DIP-18)",
   "category": "output",
   "pins": [
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Address bit: tie to GND or VDD"
    },
    {
     "name": "A1",
     "role": "passive"
    },
    {
     "name": "A0",
     "role": "passive"
    },
    {
     "name": "RESET",
     "role": "passive",
     "notes": "Reset, active LOW. Tie to VDD"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Not connected"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "VSS",
     "role": "ground"
    },
    {
     "name": "GP0",
     "role": "passive",
     "notes": "Expander I/O: to your LEDs or buttons, not to the ESP32"
    },
    {
     "name": "GP1",
     "role": "passive"
    },
    {
     "name": "GP2",
     "role": "passive"
    },
    {
     "name": "GP3",
     "role": "passive"
    },
    {
     "name": "GP4",
     "role": "passive"
    },
    {
     "name": "GP5",
     "role": "passive"
    },
    {
     "name": "GP6",
     "role": "passive"
    },
    {
     "name": "GP7",
     "role": "passive"
    },
    {
     "name": "VDD",
     "role": "power"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x20",
    "0x21",
    "0x22",
    "0x23",
    "0x24",
    "0x25",
    "0x26",
    "0x27"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     46.7,
     6.4,
     3.3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "mcp23008",
    "io expander",
    "i2c expander",
    "gpio",
    "more pins",
    "espansore"
   ],
   "sources": [
    {
     "title": "Microchip MCP23008 datasheet",
     "section": "Pinout (PDIP 18); address 0100 A2 A1 A0 (0x20 to 0x27); supply 1.8 to 5.5 V; needs external I2C pull-ups"
    }
   ]
  },
  {
   "id": "mcp23017-expander",
   "name": "MCP23017 16-bit I/O expander",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "RESET",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Must be HIGH to run: tie to VCC"
    },
    {
     "name": "INTA",
     "role": "int"
    },
    {
     "name": "INTB",
     "role": "int"
    },
    {
     "name": "A0",
     "role": "passive",
     "notes": "Address bit 0"
    },
    {
     "name": "A1",
     "role": "passive",
     "notes": "Address bit 1"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Address bit 2. Expander I/O pins GPA0-7 and GPB0-7 go to your LEDs or buttons"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x20",
    "0x21",
    "0x22",
    "0x23",
    "0x24",
    "0x25",
    "0x26",
    "0x27"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     40,
     20,
     5
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mcp23017",
    "io expander",
    "i2c expander",
    "gpio",
    "espansore"
   ],
   "sources": [
    {
     "title": "Microchip MCP23017 datasheet",
     "section": "Hardware address pins A0-A2: 0x20 to 0x27"
    },
    {
     "title": "Microchip MCP23017 datasheet",
     "section": "RESET is active LOW"
    }
   ]
  },
  {
   "id": "mcp2515-can",
   "name": "MCP2515 CAN bus module (TJA1050, SPI)",
   "category": "sensor",
   "pins": [
    {
     "name": "INT",
     "role": "int",
     "notes": "LOW on a CAN event. 5 V when powered from 5 V: use a divider"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "SI",
     "role": "spi_mosi"
    },
    {
     "name": "SO",
     "role": "spi_miso",
     "notes": "5 V when powered from 5 V: use a divider or level shifter"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the TJA1050 transceiver: use VIN"
    },
    {
     "name": "H",
     "role": "passive",
     "notes": "CAN high. To the bus, never to the ESP32"
    },
    {
     "name": "L",
     "role": "passive",
     "notes": "CAN low. To the bus, never to the ESP32"
    }
   ],
   "bus": "spi",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     44,
     28,
     14
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mcp2515",
    "can bus",
    "can",
    "tja1050",
    "automotive",
    "obd",
    "auto"
   ],
   "sources": [
    {
     "title": "Microchip MCP2515 datasheet",
     "section": "SPI interface, INT output; supply 2.7 to 5.5 V"
    },
    {
     "title": "NXP TJA1050 datasheet",
     "section": "Supply 4.75 to 5.25 V"
    }
   ]
  },
  {
   "id": "mcp3008-adc",
   "name": "MCP3008 8-channel 10-bit ADC (SPI)",
   "category": "sensor",
   "measures": [
    "voltage"
   ],
   "pins": [
    {
     "name": "CH0",
     "role": "passive",
     "notes": "Analog input 0. Never above VREF"
    },
    {
     "name": "CH1",
     "role": "passive"
    },
    {
     "name": "CH2",
     "role": "passive"
    },
    {
     "name": "CH3",
     "role": "passive"
    },
    {
     "name": "CH4",
     "role": "passive"
    },
    {
     "name": "CH5",
     "role": "passive"
    },
    {
     "name": "CH6",
     "role": "passive"
    },
    {
     "name": "CH7",
     "role": "passive"
    },
    {
     "name": "DGND",
     "role": "ground"
    },
    {
     "name": "CS",
     "role": "spi_cs",
     "notes": "CS/SHDN"
    },
    {
     "name": "DIN",
     "role": "spi_mosi"
    },
    {
     "name": "DOUT",
     "role": "spi_miso"
    },
    {
     "name": "CLK",
     "role": "spi_sck"
    },
    {
     "name": "AGND",
     "role": "ground"
    },
    {
     "name": "VREF",
     "role": "passive",
     "notes": "Reference: tie to VDD for a 0 to 3.3 V range"
    },
    {
     "name": "VDD",
     "role": "power",
     "notes": "Use 3.3 V so DOUT is safe for the ESP32"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     41.6,
     6.4,
     3.3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "mcp3008",
    "adc",
    "analog to digital",
    "10 bit",
    "spi adc",
    "convertitore",
    "analogico"
   ],
   "sources": [
    {
     "title": "Microchip MCP3004/3008 datasheet",
     "section": "Pin function table (PDIP); supply 2.7 to 5.5 V; SPI modes 0,0 and 1,1"
    }
   ]
  },
  {
   "id": "mcp3208-adc",
   "name": "MCP3208 8-channel 12-bit ADC (SPI)",
   "category": "sensor",
   "measures": [
    "voltage"
   ],
   "pins": [
    {
     "name": "CH0",
     "role": "passive",
     "notes": "Analog input 0. Never above VREF"
    },
    {
     "name": "CH1",
     "role": "passive"
    },
    {
     "name": "CH2",
     "role": "passive"
    },
    {
     "name": "CH3",
     "role": "passive"
    },
    {
     "name": "CH4",
     "role": "passive"
    },
    {
     "name": "CH5",
     "role": "passive"
    },
    {
     "name": "CH6",
     "role": "passive"
    },
    {
     "name": "CH7",
     "role": "passive"
    },
    {
     "name": "DGND",
     "role": "ground"
    },
    {
     "name": "CS",
     "role": "spi_cs",
     "notes": "CS/SHDN"
    },
    {
     "name": "DIN",
     "role": "spi_mosi"
    },
    {
     "name": "DOUT",
     "role": "spi_miso"
    },
    {
     "name": "CLK",
     "role": "spi_sck"
    },
    {
     "name": "AGND",
     "role": "ground"
    },
    {
     "name": "VREF",
     "role": "passive",
     "notes": "Reference: tie to VDD for a 0 to 3.3 V range"
    },
    {
     "name": "VDD",
     "role": "power",
     "notes": "Use 3.3 V so DOUT is safe for the ESP32"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     41.6,
     6.4,
     3.3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "mcp3208",
    "adc",
    "analog to digital",
    "12 bit",
    "spi adc",
    "convertitore",
    "analogico"
   ],
   "sources": [
    {
     "title": "Microchip MCP3204/3208 datasheet",
     "section": "Pin function table (PDIP); supply 2.7 to 5.5 V; SPI modes 0,0 and 1,1"
    }
   ]
  },
  {
   "id": "mcp4725-dac",
   "name": "MCP4725 12-bit DAC breakout",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "A0",
     "role": "passive",
     "notes": "Address bit. Most boards answer at 0x60 or 0x62"
    },
    {
     "name": "OUT",
     "role": "passive",
     "notes": "Output 0 V to VCC. To check it, wire it to an ADC1 pin"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x60",
    "0x61",
    "0x62",
    "0x63",
    "0x64",
    "0x65",
    "0x66",
    "0x67"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20,
     18,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mcp4725",
    "dac",
    "digital to analog",
    "12 bit",
    "analog output",
    "convertitore",
    "uscita analogica"
   ],
   "sources": [
    {
     "title": "Microchip MCP4725 datasheet",
     "section": "Address 1100 A2 A1 A0: A2 A1 set at the factory, A0 by pin (0x60 to 0x67); supply 2.7 to 5.5 V"
    },
    {
     "title": "Adafruit MCP4725 breakout guide",
     "section": "Pinouts. Board order differs between sellers: check the silkscreen"
    }
   ]
  },
  {
   "id": "mcp9808",
   "name": "MCP9808 precision temperature",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "ALERT",
     "role": "int",
     "notes": "Alert output (open drain), optional"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Address bit 2. Pulled LOW on the board"
    },
    {
     "name": "A1",
     "role": "passive",
     "notes": "Address bit 1. Pulled LOW on the board"
    },
    {
     "name": "A0",
     "role": "passive",
     "notes": "Address bit 0. Pulled LOW on the board (0x18)"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x18",
    "0x19",
    "0x1A",
    "0x1B",
    "0x1C",
    "0x1D",
    "0x1E",
    "0x1F"
   ],
   "idCheck": {
    "register": "0x07",
    "expect": "0x04"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     21.4,
     12.7,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mcp9808",
    "microchip",
    "precision",
    "temperature",
    "temperatura",
    "termometro"
   ],
   "sources": [
    {
     "title": "Microchip MCP9808 datasheet",
     "section": "Device ID register 0x07 = 0x0400 (first byte read is 0x04)"
    },
    {
     "title": "Microchip MCP9808 datasheet",
     "section": "Address 0011 A2 A1 A0 = 0x18 to 0x1F; supply 2.7 to 5.5 V"
    },
    {
     "title": "Adafruit MCP9808 guide",
     "section": "Pinout Vdd, GND, SCL, SDA, Alert, A2, A1, A0"
    }
   ]
  },
  {
   "id": "servo-mg90s",
   "name": "MG90S metal gear micro servo",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Brown wire"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire, 5 V: use VIN"
    },
    {
     "name": "SIG",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Orange wire. 50 Hz PWM"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "motor",
    "size": [
     22.5,
     12,
     35
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "mg90s",
    "servo",
    "metal gear",
    "motor",
    "servomotore"
   ],
   "sources": [
    {
     "title": "Tower Pro MG90S datasheet",
     "section": "Supply 4.8 to 6 V; 50 Hz PWM"
    }
   ]
  },
  {
   "id": "servo-mg996r",
   "name": "MG996R high-torque servo",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Brown wire. Also connect to the ESP32 GND"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire. Use a separate 5 to 6 V supply rated 2 A or more, not the ESP32"
    },
    {
     "name": "SIG",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Orange wire. 50 Hz PWM"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "motor",
    "size": [
     40.7,
     19.7,
     40
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "mg996r",
    "servo",
    "high torque",
    "motor",
    "servomotore"
   ],
   "sources": [
    {
     "title": "Tower Pro MG996R datasheet",
     "section": "Supply 4.8 to 7.2 V; stall current about 2.5 A"
    }
   ]
  },
  {
   "id": "mh-z19b",
   "name": "MH-Z19B CO2 sensor",
   "category": "sensor",
   "measures": [
    "co2"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "Needs 4.5 to 5.5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud, 3.3 V level)"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "PWM",
     "role": "digital_out",
     "notes": "PWM output, optional"
    },
    {
     "name": "HD",
     "role": "passive",
     "notes": "Zero calibration: pulling LOW for 7 s calibrates to 400 ppm. Leave unconnected"
    },
    {
     "name": "VO",
     "role": "analog_out",
     "notes": "Analog output, optional (not on all versions)"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     33,
     20,
     9
    ],
    "color": "#1E7A3C"
   },
   "keywords": [
    "mh-z19b",
    "mh-z19",
    "winsen",
    "co2",
    "ndir",
    "anidride carbonica"
   ],
   "sources": [
    {
     "title": "Winsen MH-Z19B user manual",
     "section": "Pins Vin, GND, Tx, Rx, PWM, HD, Vo; UART 9600 baud, 3.3 V logic"
    }
   ]
  },
  {
   "id": "microsd-module",
   "name": "Micro SD card module (SPI)",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "This version has a 3.3 V regulator and needs 5 V: use VIN"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    }
   ],
   "bus": "spi",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     42,
     24,
     4
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "micro sd",
    "sd card",
    "tf card",
    "storage",
    "data logger",
    "scheda sd",
    "memoria"
   ],
   "sources": [
    {
     "title": "SD Association Physical Layer Simplified Specification",
     "section": "SPI mode"
    }
   ]
  },
  {
   "id": "water-pump-5v",
   "name": "Mini submersible water pump 3-5 V",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "passive",
     "notes": "Red wire. Switch it with a MOSFET or relay: draws more than a GPIO can give"
    },
    {
     "name": "-",
     "role": "passive",
     "notes": "Black wire. Add a flyback diode across the motor"
    }
   ],
   "bus": "gpio",
   "voltage": "3-5",
   "model": {
    "shape": "motor",
    "size": [
     45,
     24,
     33
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "water pump",
    "pump",
    "submersible",
    "irrigation",
    "pompa",
    "pompa acqua",
    "irrigazione"
   ],
   "sources": [
    {
     "title": "Mini submersible pump (vendor datasheet)",
     "section": "DC 2.5 to 6 V, about 130 to 220 mA"
    }
   ]
  },
  {
   "id": "thermal-printer-ttl",
   "name": "Mini thermal receipt printer (TTL, 58 mm)",
   "category": "output",
   "pins": [
    {
     "name": "VH",
     "role": "passive",
     "notes": "Printer power 5 to 9 V, 2 A: its own supply, never from the ESP32"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Join to ESP32 GND too"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "The printer receives here. Connect to an ESP32 TX pin"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "Printer status, optional. May be 5 V: use a divider"
    }
   ],
   "bus": "gpio",
   "voltage": "5-9",
   "model": {
    "shape": "module",
    "size": [
     80,
     58,
     40
    ],
    "color": "#D9D9D9"
   },
   "keywords": [
    "thermal printer",
    "receipt printer",
    "csn-a2",
    "ttl printer",
    "stampante termica",
    "scontrino"
   ],
   "sources": [
    {
     "title": "Adafruit Mini Thermal Receipt Printer guide",
     "section": "TTL serial at 19200 or 9600 baud (printed on the test page); 5 to 9 V, 2 A supply"
    }
   ]
  },
  {
   "id": "ml8511",
   "name": "ML8511 analog UV sensor",
   "category": "sensor",
   "measures": [
    "uv"
   ],
   "pins": [
    {
     "name": "3V3",
     "role": "power",
     "notes": "Chip supply 2.7 to 3.6 V: use 3V3"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "About 1.0 V at no UV, rising with UV. To an ADC1 pin (GPIO 32 to 39)"
    },
    {
     "name": "EN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Enable, active HIGH. Can be tied to 3V3"
    }
   ],
   "bus": "analog",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     18,
     13,
     3
    ],
    "color": "#B22222"
   },
   "keywords": [
    "ml8511",
    "gy-8511",
    "lapis",
    "uv",
    "ultraviolet",
    "ultravioletti",
    "raggi uv"
   ],
   "sources": [
    {
     "title": "LAPIS ML8511 datasheet",
     "section": "Analog voltage output linear with UV intensity (280 to 390 nm); supply 2.7 to 3.6 V"
    },
    {
     "title": "SparkFun ML8511 hookup guide",
     "section": "Pins 3.3V, GND, OUT, EN; order differs on GY-8511 boards"
    }
   ]
  },
  {
   "id": "mlx90640",
   "name": "MLX90640 32×24 thermal camera",
   "category": "sensor",
   "measures": [
    "thermal image",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x33"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mlx90640",
    "melexis",
    "thermal camera",
    "infrared",
    "termocamera",
    "infrarossi"
   ],
   "sources": [
    {
     "title": "Melexis MLX90640 datasheet",
     "section": "I2C address 0x33 (default), up to 1 MHz; 16-bit register addresses"
    },
    {
     "title": "Melexis MLX90640 datasheet",
     "section": "55° or 110° field of view versions; the ESP32 must read and apply the calibration data from the sensor EEPROM"
    }
   ]
  },
  {
   "id": "mmc5603",
   "name": "MMC5603 3-axis magnetometer",
   "category": "sensor",
   "measures": [
    "magnetic field",
    "heading",
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "Output of the on-board 3.3 V regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x30"
   ],
   "idCheck": {
    "register": "0x39",
    "expect": "0x10"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "mmc5603",
    "memsic",
    "magnetometer",
    "compass",
    "bussola",
    "magnetometro"
   ],
   "sources": [
    {
     "title": "MEMSIC MMC5603NJ datasheet",
     "section": "Register 0x39 Product ID (reads 0x10)"
    },
    {
     "title": "MEMSIC MMC5603NJ datasheet",
     "section": "Fixed I2C address 0x30"
    }
   ]
  },
  {
   "id": "mosfet-aod4184",
   "name": "MOSFET switch module (dual AOD4184)",
   "category": "output",
   "pins": [
    {
     "name": "PWM",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin order varies between boards: match by the printed label. Trigger / PWM. HIGH = load on"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VIN+",
     "role": "passive",
     "notes": "Load supply + 5 to 36 V"
    },
    {
     "name": "VIN-",
     "role": "passive",
     "notes": "Load supply -"
    },
    {
     "name": "OUT+",
     "role": "passive",
     "notes": "To the load +"
    },
    {
     "name": "OUT-",
     "role": "passive",
     "notes": "To the load -. Add a flyback diode for motors and coils"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     34,
     17,
     12
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mosfet",
    "aod4184",
    "d4184",
    "switch",
    "pwm",
    "logic level",
    "interruttore"
   ],
   "sources": [
    {
     "title": "Alpha & Omega AOD4184A datasheet",
     "section": "VGS(th) 1.5 to 2.5 V; RDS(on) specified at VGS 4.5 V and 10 V"
    }
   ]
  },
  {
   "id": "mosfet-irf520",
   "name": "MOSFET switch module (IRF520)",
   "category": "output",
   "pins": [
    {
     "name": "SIG",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "IRF520 only half-opens at 3.3 V: fine for LEDs, weak for motors. A logic-level MOSFET is better"
    },
    {
     "name": "VCC",
     "role": "passive",
     "notes": "Not needed on most versions"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VIN",
     "role": "passive",
     "notes": "Load supply + (up to 24 V)"
    },
    {
     "name": "V+",
     "role": "passive",
     "notes": "To the load +"
    },
    {
     "name": "V-",
     "role": "passive",
     "notes": "To the load -"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     34,
     20,
     12
    ],
    "color": "#B22222"
   },
   "keywords": [
    "mosfet",
    "irf520",
    "switch",
    "pwm",
    "transistor",
    "interruttore"
   ],
   "sources": [
    {
     "title": "Vishay IRF520 datasheet",
     "section": "Gate threshold 2 to 4 V: not fully on at 3.3 V"
    }
   ]
  },
  {
   "id": "mp1584-buck",
   "name": "MP1584 mini buck converter",
   "category": "output",
   "pins": [
    {
     "name": "IN+",
     "role": "passive",
     "notes": "Input 4.5 to 28 V"
    },
    {
     "name": "IN-",
     "role": "ground",
     "notes": "Input ground, same as OUT-"
    },
    {
     "name": "OUT+",
     "role": "passive",
     "notes": "Adjustable 0.8 to 20 V. Set 5 V with the trimmer BEFORE wiring it to VIN"
    },
    {
     "name": "OUT-",
     "role": "ground",
     "notes": "To the ESP32 GND"
    }
   ],
   "bus": "gpio",
   "voltage": "4.5-28",
   "model": {
    "shape": "module",
    "size": [
     22,
     17,
     4
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "mp1584",
    "buck",
    "step down",
    "mini",
    "dc-dc",
    "riduttore di tensione"
   ],
   "sources": [
    {
     "title": "MPS MP1584 datasheet",
     "section": "Input 4.5 to 28 V; 3 A peak; 0.8 V feedback reference"
    }
   ]
  },
  {
   "id": "mpr121-touch",
   "name": "MPR121 capacitive touch sensor (12 keys)",
   "category": "input",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V (the chip must not get 5 V unless the board has a regulator)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "IRQ",
     "role": "int",
     "notes": "LOW when a touch changes"
    },
    {
     "name": "ADD",
     "role": "passive",
     "notes": "Address: GND 0x5A, VCC 0x5B, SDA 0x5C, SCL 0x5D"
    },
    {
     "name": "E0",
     "role": "passive",
     "notes": "Electrode 0: to a touch pad, foil or fruit"
    },
    {
     "name": "E1",
     "role": "passive"
    },
    {
     "name": "E2",
     "role": "passive"
    },
    {
     "name": "E3",
     "role": "passive"
    },
    {
     "name": "E4",
     "role": "passive"
    },
    {
     "name": "E5",
     "role": "passive"
    },
    {
     "name": "E6",
     "role": "passive"
    },
    {
     "name": "E7",
     "role": "passive"
    },
    {
     "name": "E8",
     "role": "passive"
    },
    {
     "name": "E9",
     "role": "passive"
    },
    {
     "name": "E10",
     "role": "passive"
    },
    {
     "name": "E11",
     "role": "passive"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x5A",
    "0x5B",
    "0x5C",
    "0x5D"
   ],
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     48,
     30,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mpr121",
    "capacitive touch",
    "touch",
    "12 keys",
    "touch keypad",
    "sensore touch",
    "tocco"
   ],
   "sources": [
    {
     "title": "NXP MPR121 datasheet",
     "section": "ADDR pin selects 0x5A to 0x5D; supply 1.71 to 3.6 V"
    },
    {
     "title": "Common MPR121 breakouts",
     "section": "Header order differs (Adafruit, CJMCU, SparkFun): check the silkscreen"
    }
   ]
  },
  {
   "id": "mpu6050",
   "name": "MPU6050 (GY-521) accelerometer + gyro",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation",
    "temperature"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x68",
    "0x69"
   ],
   "idCheck": {
    "register": "0x75",
    "expect": "0x68",
    "otherValues": {
     "0x70": "This is an MPU6500 clone, not an MPU6050. Most libraries still work with small changes."
    }
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     16,
     21,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mpu6050",
    "gy-521",
    "accelerometer",
    "gyro",
    "imu",
    "motion"
   ],
   "sources": [
    {
     "title": "InvenSense MPU-6000/6050 Register Map",
     "section": "4.32 Register 117 WHO_AM_I (0x68)"
    }
   ],
   "starterSketch": "mpu6050"
  },
  {
   "id": "mpu6500",
   "name": "MPU6500 (GY-6500) accelerometer + gyro",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation",
    "temperature"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "EDA",
     "role": "passive",
     "notes": "Auxiliary I2C data. Leave unconnected"
    },
    {
     "name": "ECL",
     "role": "passive",
     "notes": "Auxiliary I2C clock. Leave unconnected"
    },
    {
     "name": "AD0",
     "role": "passive",
     "notes": "Address select: LOW = 0x68, HIGH = 0x69"
    },
    {
     "name": "INT",
     "role": "int"
    },
    {
     "name": "NCS",
     "role": "passive",
     "notes": "SPI chip select. Leave unconnected or HIGH for I2C"
    },
    {
     "name": "FSYNC",
     "role": "passive",
     "notes": "Frame sync. Leave unconnected or tie to GND"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x68",
    "0x69"
   ],
   "idCheck": {
    "register": "0x75",
    "expect": "0x70"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     26.4,
     15.5,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "mpu6500",
    "gy-6500",
    "imu",
    "accelerometer",
    "gyro",
    "giroscopio",
    "accelerometro"
   ],
   "sources": [
    {
     "title": "InvenSense MPU-6500 Register Map",
     "section": "Register 117 WHO_AM_I (reads 0x70)"
    },
    {
     "title": "InvenSense MPU-6500 Product Specification",
     "section": "I2C address 0x68 / 0x69 with AD0"
    }
   ]
  },
  {
   "id": "mpu9250",
   "name": "MPU9250 (GY-9250) 9-axis IMU",
   "category": "sensor",
   "measures": [
    "acceleration",
    "rotation",
    "magnetic field"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "EDA",
     "role": "passive",
     "notes": "Auxiliary I2C data. Leave unconnected"
    },
    {
     "name": "ECL",
     "role": "passive",
     "notes": "Auxiliary I2C clock. Leave unconnected"
    },
    {
     "name": "AD0",
     "role": "passive",
     "notes": "Address select: LOW = 0x68, HIGH = 0x69"
    },
    {
     "name": "INT",
     "role": "int"
    },
    {
     "name": "NCS",
     "role": "passive",
     "notes": "SPI chip select. Leave unconnected (HIGH) for I2C"
    },
    {
     "name": "FSYNC",
     "role": "passive",
     "notes": "Frame sync. Leave unconnected or tie to GND"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x68",
    "0x69"
   ],
   "idCheck": {
    "register": "0x75",
    "expect": "0x71",
    "otherValues": {
     "0x70": "This is an MPU6500: it has no magnetometer."
    }
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     26.4,
     15.5,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "mpu9250",
    "gy-9250",
    "imu",
    "9dof",
    "accelerometer",
    "gyro",
    "magnetometer",
    "giroscopio"
   ],
   "sources": [
    {
     "title": "InvenSense MPU-9250 Register Map",
     "section": "Register 117 WHO_AM_I (reads 0x71)"
    },
    {
     "title": "InvenSense MPU-9250 Product Specification",
     "section": "I2C address 0x68 / 0x69 with AD0"
    }
   ]
  },
  {
   "id": "mq131",
   "name": "MQ-131 ozone sensor",
   "category": "sensor",
   "measures": [
    "ozone"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-131",
    "mq131",
    "ozone",
    "o3",
    "ozono",
    "gas"
   ],
   "sources": [
    {
     "title": "Winsen MQ131 datasheet",
     "section": "Sensitive to ozone (O3); resistance rises with ozone"
    },
    {
     "title": "Winsen MQ131 datasheet",
     "section": "Heater 5 V; needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq135",
   "name": "MQ-135 air quality sensor",
   "category": "sensor",
   "measures": [
    "air quality"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-135",
    "mq135",
    "air quality",
    "nh3",
    "benzene",
    "qualità aria",
    "gas"
   ],
   "sources": [
    {
     "title": "Hanwei MQ-135 datasheet",
     "section": "Sensitive to NH3, NOx, alcohol, benzene, smoke, CO2; heater 5 V"
    },
    {
     "title": "Hanwei MQ-135 datasheet",
     "section": "Needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq136",
   "name": "MQ-136 hydrogen sulfide sensor",
   "category": "sensor",
   "measures": [
    "hydrogen sulfide"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-136",
    "mq136",
    "h2s",
    "hydrogen sulfide",
    "acido solfidrico",
    "gas"
   ],
   "sources": [
    {
     "title": "Winsen MQ136 datasheet",
     "section": "Sensitive to hydrogen sulfide (H2S)"
    },
    {
     "title": "Winsen MQ136 datasheet",
     "section": "Heater 5 V; needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq137",
   "name": "MQ-137 ammonia sensor",
   "category": "sensor",
   "measures": [
    "ammonia"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-137",
    "mq137",
    "nh3",
    "ammonia",
    "ammoniaca",
    "gas"
   ],
   "sources": [
    {
     "title": "Winsen MQ137 datasheet",
     "section": "Sensitive to ammonia (NH3)"
    },
    {
     "title": "Winsen MQ137 datasheet",
     "section": "Heater 5 V; needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq2",
   "name": "MQ-2 smoke + flammable gas",
   "category": "sensor",
   "measures": [
    "gas",
    "smoke"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-2",
    "mq2",
    "smoke",
    "lpg",
    "gas",
    "fumo",
    "gas infiammabile"
   ],
   "sources": [
    {
     "title": "Hanwei MQ-2 datasheet",
     "section": "Detects LPG, propane, hydrogen, smoke; heater 5 V"
    },
    {
     "title": "Hanwei MQ-2 datasheet",
     "section": "Needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq3",
   "name": "MQ-3 alcohol sensor",
   "category": "sensor",
   "measures": [
    "alcohol"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-3",
    "mq3",
    "alcohol",
    "breath",
    "ethanol",
    "alcol"
   ],
   "sources": [
    {
     "title": "Hanwei MQ-3 datasheet",
     "section": "Sensitive to alcohol vapour; heater 5 V"
    },
    {
     "title": "Hanwei MQ-3 datasheet",
     "section": "Needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq4",
   "name": "MQ-4 methane sensor",
   "category": "sensor",
   "measures": [
    "methane"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-4",
    "mq4",
    "methane",
    "natural gas",
    "metano",
    "gas"
   ],
   "sources": [
    {
     "title": "Hanwei MQ-4 datasheet",
     "section": "Sensitive to methane (CH4); heater 5 V"
    },
    {
     "title": "Hanwei MQ-4 datasheet",
     "section": "Needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq5",
   "name": "MQ-5 LPG + natural gas sensor",
   "category": "sensor",
   "measures": [
    "gas"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-5",
    "mq5",
    "lpg",
    "natural gas",
    "gas",
    "metano"
   ],
   "sources": [
    {
     "title": "Hanwei MQ-5 datasheet",
     "section": "Sensitive to LPG and natural gas; heater 5 V"
    },
    {
     "title": "Hanwei MQ-5 datasheet",
     "section": "Needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq6",
   "name": "MQ-6 LPG sensor",
   "category": "sensor",
   "measures": [
    "lpg",
    "gas"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-6",
    "mq6",
    "lpg",
    "propane",
    "butane",
    "gpl",
    "gas"
   ],
   "sources": [
    {
     "title": "Hanwei MQ-6 datasheet",
     "section": "Most sensitive to LPG, isobutane and propane"
    },
    {
     "title": "Hanwei MQ-6 datasheet",
     "section": "Heater 5 V; needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq7",
   "name": "MQ-7 carbon monoxide sensor",
   "category": "sensor",
   "measures": [
    "carbon monoxide"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-7",
    "mq7",
    "carbon monoxide",
    "co",
    "monossido di carbonio",
    "gas"
   ],
   "sources": [
    {
     "title": "Hanwei MQ-7 datasheet",
     "section": "CO sensing needs a 5 V / 1.4 V heater cycle; modules heat at a constant 5 V, so readings are only rough"
    },
    {
     "title": "Hanwei MQ-7 datasheet",
     "section": "Needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq8",
   "name": "MQ-8 hydrogen sensor",
   "category": "sensor",
   "measures": [
    "hydrogen"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-8",
    "mq8",
    "hydrogen",
    "h2",
    "idrogeno",
    "gas"
   ],
   "sources": [
    {
     "title": "Hanwei MQ-8 datasheet",
     "section": "Most sensitive to hydrogen (H2)"
    },
    {
     "title": "Hanwei MQ-8 datasheet",
     "section": "Heater 5 V; needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mq9",
   "name": "MQ-9 carbon monoxide + flammable gas",
   "category": "sensor",
   "measures": [
    "carbon monoxide",
    "gas"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the heater (about 150 mA): use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Can reach 5 V: use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     32,
     22,
     27
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mq-9",
    "mq9",
    "carbon monoxide",
    "lpg",
    "methane",
    "monossido di carbonio"
   ],
   "sources": [
    {
     "title": "Hanwei MQ-9 datasheet",
     "section": "CO at low heater voltage, flammable gas at high heater voltage"
    },
    {
     "title": "Hanwei MQ-9 datasheet",
     "section": "Needs a burn-in / warm-up time before readings are stable"
    }
   ]
  },
  {
   "id": "mt3608-boost",
   "name": "MT3608 boost converter",
   "category": "output",
   "pins": [
    {
     "name": "VIN+",
     "role": "passive",
     "notes": "Input 2 to 24 V"
    },
    {
     "name": "VIN-",
     "role": "ground",
     "notes": "Input ground, same as VOUT-"
    },
    {
     "name": "VOUT+",
     "role": "passive",
     "notes": "Adjustable up to 28 V, always above the input. Set it with the trimmer BEFORE wiring"
    },
    {
     "name": "VOUT-",
     "role": "ground",
     "notes": "To the ESP32 GND"
    }
   ],
   "bus": "gpio",
   "voltage": "2-24",
   "model": {
    "shape": "module",
    "size": [
     37,
     17,
     6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "mt3608",
    "boost",
    "step up",
    "dc-dc",
    "battery",
    "elevatore di tensione"
   ],
   "sources": [
    {
     "title": "Aerosemi MT3608 datasheet",
     "section": "Input 2 to 24 V; output up to 28 V; 4 A switch current limit"
    }
   ]
  },
  {
   "id": "mx1508-driver",
   "name": "MX1508 dual DC motor driver",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "passive",
     "notes": "Pin order varies between boards: match by the printed label. Motor supply 2 to 9.6 V"
    },
    {
     "name": "-",
     "role": "ground",
     "notes": "Share it with the motor supply and the ESP32 GND"
    },
    {
     "name": "IN1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor A"
    },
    {
     "name": "IN2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor A"
    },
    {
     "name": "IN3",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B"
    },
    {
     "name": "IN4",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B"
    },
    {
     "name": "MA1",
     "role": "passive",
     "notes": "Motor A"
    },
    {
     "name": "MA2",
     "role": "passive",
     "notes": "Motor A"
    },
    {
     "name": "MB1",
     "role": "passive",
     "notes": "Motor B"
    },
    {
     "name": "MB2",
     "role": "passive",
     "notes": "Motor B"
    }
   ],
   "bus": "gpio",
   "voltage": "2-9.6",
   "model": {
    "shape": "module",
    "size": [
     26.4,
     22,
     5
    ],
    "color": "#2E8B57"
   },
   "keywords": [
    "mx1508",
    "motor driver",
    "h-bridge",
    "dual",
    "dc motor",
    "driver motore"
   ],
   "sources": [
    {
     "title": "MX1508 datasheet (Mixic)",
     "section": "Supply 2 to 9.6 V; about 1.5 A per channel continuous"
    }
   ]
  },
  {
   "id": "n20-motor-encoder",
   "name": "N20 gear motor with hall encoder",
   "category": "output",
   "pins": [
    {
     "name": "M1",
     "role": "passive",
     "notes": "Pin order varies between boards: match by the printed label. Motor. Never to an ESP32 pin: use a motor driver"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Encoder ground"
    },
    {
     "name": "C1",
     "role": "digital_out",
     "notes": "Encoder channel A"
    },
    {
     "name": "C2",
     "role": "digital_out",
     "notes": "Encoder channel B"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Encoder supply 3.3 to 5 V: use 3V3 so the outputs stay at 3.3 V"
    },
    {
     "name": "M2",
     "role": "passive",
     "notes": "Motor"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "motor",
    "size": [
     16.2,
     10,
     34
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "n20",
    "gear motor",
    "encoder",
    "hall",
    "micro motor",
    "motoriduttore",
    "encoder"
   ],
   "sources": [
    {
     "title": "N20 micro gear motor with magnetic encoder (vendor datasheet)",
     "section": "6-pin connector M1 GND C1 C2 VCC M2"
    }
   ]
  },
  {
   "id": "nau7802",
   "name": "NAU7802 24-bit load cell ADC (I2C)",
   "category": "sensor",
   "measures": [
    "weight"
   ],
   "pins": [
    {
     "name": "3V3",
     "role": "power",
     "notes": "SparkFun Qwiic Scale-style order"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Data ready, optional"
    },
    {
     "name": "AVDD",
     "role": "passive",
     "notes": "Analog supply output. Leave unconnected"
    },
    {
     "name": "RED",
     "role": "passive",
     "notes": "Load cell E+"
    },
    {
     "name": "BLK",
     "role": "passive",
     "notes": "Load cell E-"
    },
    {
     "name": "WHT",
     "role": "passive",
     "notes": "Load cell A-"
    },
    {
     "name": "GRN",
     "role": "passive",
     "notes": "Load cell A+"
    },
    {
     "name": "YLW",
     "role": "passive",
     "notes": "Load cell shield, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x2A"
   ],
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     30,
     25.4,
     1.6
    ],
    "color": "#C8102E"
   },
   "keywords": [
    "nau7802",
    "qwiic scale",
    "load cell",
    "scale",
    "weight",
    "bilancia",
    "peso"
   ],
   "sources": [
    {
     "title": "Nuvoton NAU7802 datasheet",
     "section": "Fixed I2C address 0x2A; 24-bit ADC with PGA for bridge sensors"
    }
   ]
  },
  {
   "id": "nema17-stepper",
   "name": "NEMA 17 bipolar stepper motor",
   "category": "output",
   "pins": [
    {
     "name": "A+",
     "role": "passive",
     "notes": "Coil A. Wire colours vary: find the pairs with a multimeter"
    },
    {
     "name": "A-",
     "role": "passive",
     "notes": "Coil A"
    },
    {
     "name": "B+",
     "role": "passive",
     "notes": "Coil B"
    },
    {
     "name": "B-",
     "role": "passive",
     "notes": "Coil B. Never connect the motor to the ESP32 directly: use a driver"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "motor",
    "size": [
     42.3,
     42.3,
     40
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "nema17",
    "nema 17",
    "stepper",
    "bipolar",
    "step motor",
    "motore passo passo"
   ],
   "sources": [
    {
     "title": "NEMA ICS 16 standard",
     "section": "42.3 mm frame size"
    }
   ]
  },
  {
   "id": "neo-6m-gps",
   "name": "NEO-6M GPS module (GY-NEO6MV2)",
   "category": "sensor",
   "measures": [
    "position",
    "time"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud)"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     36,
     24,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "neo-6m",
    "gps",
    "gnss",
    "u-blox",
    "location",
    "posizione",
    "navigatore"
   ],
   "sources": [
    {
     "title": "u-blox NEO-6 datasheet",
     "section": "UART default 9600 baud, NMEA output"
    }
   ]
  },
  {
   "id": "neo-m8n-gps",
   "name": "NEO-M8N GPS module (GY-GPSV3-M8N)",
   "category": "sensor",
   "measures": [
    "position",
    "time"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud)"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     36,
     25,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "neo-m8n",
    "gps",
    "gnss",
    "u-blox",
    "glonass",
    "galileo",
    "posizione",
    "navigatore"
   ],
   "sources": [
    {
     "title": "u-blox NEO-M8 data sheet",
     "section": "UART default 9600 baud, NMEA output; concurrent GNSS"
    },
    {
     "title": "GY-GPSV3-M8N board",
     "section": "Header VCC, RX, TX, GND. Some boards print the order reversed or add PPS: check the silkscreen"
    }
   ]
  },
  {
   "id": "neopixel-stick-8",
   "name": "NeoPixel Stick 8 LEDs",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin order varies between boards: match by the printed label."
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data in. Add a 330 Ω resistor"
    },
    {
     "name": "5VDC",
     "role": "power",
     "notes": "4 to 7 V per the maker. At 3V3 it often works dimmer"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     51,
     10,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "neopixel",
    "stick",
    "ws2812b",
    "8 led",
    "adafruit",
    "barra led"
   ],
   "sources": [
    {
     "title": "Adafruit NeoPixel Stick 8 product page",
     "section": "Pads GND, DIN, 5VDC on each end"
    },
    {
     "title": "Worldsemi WS2812B datasheet",
     "section": "Data input high level 0.7 × VDD"
    }
   ]
  },
  {
   "id": "nokia5110-lcd",
   "name": "Nokia 5110 LCD 84x48 (PCD8544)",
   "category": "display",
   "pins": [
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "CE",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "DIN",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI)"
    },
    {
     "name": "CLK",
     "role": "spi_sck",
     "notes": "SPI clock"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V only"
    },
    {
     "name": "BL",
     "role": "passive",
     "notes": "Backlight: to 3V3 through a resistor, or a GPIO"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     45,
     45,
     5
    ],
    "color": "#B22222"
   },
   "keywords": [
    "nokia 5110",
    "pcd8544",
    "lcd",
    "84x48",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Philips PCD8544 datasheet",
     "section": "Serial interface: SCE, D/C, SDIN, SCLK, RES; supply 2.7 to 3.3 V"
    }
   ]
  },
  {
   "id": "sds011",
   "name": "Nova SDS011 particulate matter sensor",
   "category": "sensor",
   "measures": [
    "particulates"
   ],
   "pins": [
    {
     "name": "CTL",
     "role": "passive",
     "notes": "Pin 1. Reserved. Leave unconnected"
    },
    {
     "name": "PWM25",
     "role": "digital_out",
     "notes": "Pin 2 (marked 1um): PM2.5 PWM output. Optional"
    },
    {
     "name": "5V",
     "role": "power",
     "notes": "Pin 3. Needs 5 V for the fan: use VIN"
    },
    {
     "name": "PWM10",
     "role": "digital_out",
     "notes": "Pin 4 (marked 25um): PM10 PWM output. Optional"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin 5"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin 6. UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "Pin 7. UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud, 3.3 V level)"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     71,
     70,
     23
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "sds011",
    "nova fitness",
    "pm2.5",
    "pm10",
    "dust",
    "particulate",
    "polveri sottili",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Nova Fitness SDS011 datasheet",
     "section": "Pin 1 CTL, 2 PM2.5 PWM, 3 5V, 4 PM10 PWM, 5 GND, 6 RX, 7 TX; UART 9600 baud, 3.3 V TTL"
    }
   ]
  },
  {
   "id": "nrf24l01-adapter",
   "name": "nRF24L01 socket adapter (5 V to 3.3 V)",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "5 V in: the on-board AMS1117 makes 3.3 V for the radio"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CE",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Chip enable"
    },
    {
     "name": "CSN",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "MO",
     "role": "spi_mosi",
     "notes": "MOSI"
    },
    {
     "name": "MI",
     "role": "spi_miso",
     "notes": "MISO"
    },
    {
     "name": "IRQ",
     "role": "int",
     "notes": "Interrupt, optional"
    }
   ],
   "bus": "spi",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     27,
     19,
     12
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "nrf24l01 adapter",
    "nrf24",
    "socket",
    "ams1117",
    "regulator",
    "adattatore",
    "radio"
   ],
   "sources": [
    {
     "title": "Advanced Monolithic Systems AMS1117 datasheet",
     "section": "3.3 V fixed output, 1 A"
    },
    {
     "title": "Nordic nRF24L01+ product specification",
     "section": "Digital inputs are 5 V tolerant; supply 1.9 to 3.6 V"
    }
   ]
  },
  {
   "id": "nrf24l01",
   "name": "nRF24L01+ 2.4 GHz radio",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V only. Add a 10 µF capacitor across VCC and GND"
    },
    {
     "name": "CE",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Chip enable"
    },
    {
     "name": "CSN",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "IRQ",
     "role": "int",
     "notes": "Interrupt, optional"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     29,
     15,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "nrf24l01",
    "nrf24",
    "2.4ghz",
    "radio",
    "wireless",
    "transceiver",
    "radio"
   ],
   "sources": [
    {
     "title": "Nordic nRF24L01+ product specification",
     "section": "SPI interface, CE and IRQ pins; supply 1.9 to 3.6 V"
    }
   ]
  },
  {
   "id": "nrf24l01-pa-lna",
   "name": "nRF24L01+ PA/LNA radio with antenna",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V only. Draws over 100 mA when sending: use the adapter board or a 10 to 100 µF capacitor"
    },
    {
     "name": "CE",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Chip enable"
    },
    {
     "name": "CSN",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "IRQ",
     "role": "int",
     "notes": "Interrupt, optional"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     41,
     16,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "nrf24l01",
    "pa lna",
    "nrf24",
    "2.4ghz",
    "long range",
    "radio",
    "antenna",
    "sma"
   ],
   "sources": [
    {
     "title": "Nordic nRF24L01+ product specification",
     "section": "SPI interface, CE and IRQ pins; supply 1.9 to 3.6 V"
    },
    {
     "title": "Skyworks RFX2401C datasheet",
     "section": "2.4 GHz PA/LNA front end used on most PA+LNA modules"
    }
   ]
  },
  {
   "id": "encoder-omron-e6b2",
   "name": "Omron E6B2-CWZ6C incremental encoder (A/B/Z)",
   "category": "input",
   "measures": [
    "rotation",
    "position",
    "speed"
   ],
   "pins": [
    {
     "name": "BROWN",
     "role": "power",
     "notes": "Supply +. Needs 5 to 24 V: use VIN (5 V)"
    },
    {
     "name": "BLUE",
     "role": "ground",
     "notes": "0 V"
    },
    {
     "name": "BLACK",
     "role": "digital_out",
     "notes": "Phase A. NPN open collector: use INPUT_PULLUP or 4.7 kΩ to 3V3, never to the supply"
    },
    {
     "name": "WHITE",
     "role": "digital_out",
     "notes": "Phase B. NPN open collector: pull-up to 3V3 only"
    },
    {
     "name": "ORANGE",
     "role": "digital_out",
     "notes": "Phase Z (one pulse per turn). NPN open collector: pull-up to 3V3 only"
    },
    {
     "name": "SHIELD",
     "role": "passive",
     "notes": "Leave unconnected or tie to GND"
    }
   ],
   "bus": "gpio",
   "voltage": "5-24",
   "model": {
    "shape": "motor",
    "size": [
     40,
     40,
     35
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "e6b2",
    "e6b2-cwz6c",
    "omron",
    "encoder",
    "incremental encoder",
    "quadrature",
    "encoder incrementale"
   ],
   "sources": [
    {
     "title": "Omron E6B2-C datasheet",
     "section": "E6B2-CWZ6C: 5 to 24 V DC, NPN open-collector outputs A, B, Z"
    },
    {
     "title": "Omron E6B2-C datasheet",
     "section": "Wire colours: brown +, blue 0 V, black A, white B, orange Z, shield"
    }
   ]
  },
  {
   "id": "opt3001",
   "name": "OPT3001 ambient light (CJMCU-3001)",
   "category": "sensor",
   "measures": [
    "light"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Chip maximum is 3.6 V: use 3V3 only"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output (open drain), optional"
    },
    {
     "name": "ADDR",
     "role": "passive",
     "notes": "Address: GND = 0x44, VCC = 0x45, SDA = 0x46, SCL = 0x47"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x44",
    "0x45",
    "0x46",
    "0x47"
   ],
   "idCheck": {
    "register": "0x7F",
    "expect": "0x30"
   },
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     16.3,
     12,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "opt3001",
    "cjmcu-3001",
    "texas instruments",
    "lux",
    "ambient light",
    "luce",
    "luminosità"
   ],
   "sources": [
    {
     "title": "TI OPT3001 datasheet",
     "section": "Device ID register 0x7F = 0x3001 (first byte read is 0x30)"
    },
    {
     "title": "TI OPT3001 datasheet",
     "section": "ADDR pin: GND, VDD, SDA, SCL = 0x44 to 0x47; supply 1.6 to 3.6 V"
    }
   ]
  },
  {
   "id": "ov7670-camera",
   "name": "OV7670 camera module (no FIFO)",
   "category": "sensor",
   "measures": [
    "image"
   ],
   "pins": [
    {
     "name": "3.3V",
     "role": "power",
     "notes": "3.3 V only"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SIOC",
     "role": "i2c_scl",
     "notes": "SCCB clock (I2C-like, address 0x21). Add 4.7 kΩ pull-ups"
    },
    {
     "name": "SIOD",
     "role": "i2c_sda",
     "notes": "SCCB data. Answers only while XCLK runs"
    },
    {
     "name": "VSYNC",
     "role": "digital_out",
     "notes": "Frame sync"
    },
    {
     "name": "HREF",
     "role": "digital_out",
     "notes": "Line valid"
    },
    {
     "name": "PCLK",
     "role": "digital_out",
     "notes": "Pixel clock"
    },
    {
     "name": "XCLK",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Clock from the ESP32 (10 to 24 MHz). The camera does nothing without it"
    },
    {
     "name": "D7",
     "role": "digital_out",
     "notes": "Pixel data bit 7"
    },
    {
     "name": "D6",
     "role": "digital_out"
    },
    {
     "name": "D5",
     "role": "digital_out"
    },
    {
     "name": "D4",
     "role": "digital_out"
    },
    {
     "name": "D3",
     "role": "digital_out"
    },
    {
     "name": "D2",
     "role": "digital_out"
    },
    {
     "name": "D1",
     "role": "digital_out"
    },
    {
     "name": "D0",
     "role": "digital_out",
     "notes": "Pixel data bit 0"
    },
    {
     "name": "RESET",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW. Tie to 3.3 V if unused"
    },
    {
     "name": "PWDN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "HIGH = power down. Tie to GND if unused"
    }
   ],
   "bus": "gpio",
   "addresses": [
    "0x21"
   ],
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     47,
     34,
     25
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ov7670",
    "camera",
    "omnivision",
    "vga",
    "image sensor",
    "fotocamera",
    "telecamera"
   ],
   "sources": [
    {
     "title": "OmniVision OV7670 datasheet",
     "section": "Pin description; SCCB write address 0x42 (7-bit 0x21); PID register 0x0A = 0x76"
    },
    {
     "title": "Common OV7670 2x9 header module",
     "section": "3.3V, GND, SIOC, SIOD, VSYNC, HREF, PCLK, XCLK, D7 to D0, RESET, PWDN"
    }
   ]
  },
  {
   "id": "paj7620",
   "name": "PAJ7620U2 gesture sensor",
   "category": "sensor",
   "measures": [
    "gesture",
    "proximity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "LOW when a gesture is detected, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x73"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "paj7620",
    "paj7620u2",
    "gesture",
    "swipe",
    "hand",
    "gesti",
    "mano"
   ],
   "sources": [
    {
     "title": "PixArt PAJ7620U2 datasheet",
     "section": "I2C address 0x73; part ID 0x7620 in bank 0 registers 0x00/0x01; the first access only wakes the chip"
    }
   ]
  },
  {
   "id": "pam8403-amp",
   "name": "PAM8403 stereo amplifier 2x3 W",
   "category": "output",
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Pin order varies between boards: match by the printed label. 2.5 to 5.5 V. Use VIN (5 V) for full volume"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Also the audio input ground"
    },
    {
     "name": "L",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Left audio in. ESP32 DAC GPIO 25 or 26 works; the module has input capacitors"
    },
    {
     "name": "R",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Right audio in"
    },
    {
     "name": "L+",
     "role": "passive",
     "notes": "Left speaker +"
    },
    {
     "name": "L-",
     "role": "passive",
     "notes": "Left speaker -. Bridged output: never connect to GND"
    },
    {
     "name": "R+",
     "role": "passive",
     "notes": "Right speaker +"
    },
    {
     "name": "R-",
     "role": "passive",
     "notes": "Right speaker -. Bridged output: never connect to GND"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "breakout",
    "size": [
     21.3,
     18,
     3
    ],
    "color": "#2E8B57"
   },
   "keywords": [
    "pam8403",
    "amplifier",
    "class d",
    "stereo",
    "speaker",
    "amplificatore",
    "altoparlante"
   ],
   "sources": [
    {
     "title": "Diodes Inc. PAM8403 datasheet",
     "section": "Supply 2.5 to 5.5 V; bridge-tied (BTL) outputs, 3 W into 4 Ω"
    }
   ]
  },
  {
   "id": "buzzer-passive",
   "name": "Passive buzzer",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "To a PWM-capable GPIO: use tone() or ledc to make a sound"
    },
    {
     "name": "-",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "led",
    "size": [
     12,
     12,
     8.5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "passive buzzer",
    "buzzer",
    "piezo",
    "tone",
    "melody",
    "cicalino",
    "melodia"
   ],
   "sources": [
    {
     "title": "Espressif ESP-IDF Programming Guide",
     "section": "LEDC (LED PWM controller)"
    }
   ]
  },
  {
   "id": "pc817-opto-2ch",
   "name": "PC817 optocoupler module 2 channels",
   "category": "output",
   "pins": [
    {
     "name": "IN1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin order varies between boards: match by the printed label. Channel 1 input (LED side, series resistor on board)"
    },
    {
     "name": "IN2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Channel 2 input"
    },
    {
     "name": "G",
     "role": "ground",
     "notes": "Input side ground"
    },
    {
     "name": "V1",
     "role": "passive",
     "notes": "Channel 1 output, isolated side"
    },
    {
     "name": "G1",
     "role": "passive",
     "notes": "Channel 1 output ground, isolated side"
    },
    {
     "name": "V2",
     "role": "passive",
     "notes": "Channel 2 output, isolated side"
    },
    {
     "name": "G2",
     "role": "passive",
     "notes": "Channel 2 output ground, isolated side"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     30,
     22,
     10
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "pc817",
    "optocoupler",
    "isolation",
    "opto",
    "fotoaccoppiatore",
    "isolamento"
   ],
   "sources": [
    {
     "title": "Sharp PC817 datasheet",
     "section": "Forward voltage about 1.2 V; current transfer ratio 50 to 600 %"
    }
   ]
  },
  {
   "id": "pca9685-servo",
   "name": "PCA9685 16-channel PWM / servo driver",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "OE",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Output enable, active LOW. Leave unconnected (pulled LOW)"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Logic supply: 3V3"
    },
    {
     "name": "V+",
     "role": "passive",
     "notes": "Servo power from a separate 5 to 6 V supply. Never the logic pin"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x40",
    "0x41",
    "0x42",
    "0x43",
    "0x44",
    "0x45",
    "0x46",
    "0x47",
    "0x48",
    "0x49",
    "0x4A",
    "0x4B",
    "0x4C",
    "0x4D",
    "0x4E",
    "0x4F",
    "0x50",
    "0x51",
    "0x52",
    "0x53",
    "0x54",
    "0x55",
    "0x56",
    "0x57",
    "0x58",
    "0x59",
    "0x5A",
    "0x5B",
    "0x5C",
    "0x5D",
    "0x5E",
    "0x5F",
    "0x60",
    "0x61",
    "0x62",
    "0x63",
    "0x64",
    "0x65",
    "0x66",
    "0x67",
    "0x68",
    "0x69",
    "0x6A",
    "0x6B",
    "0x6C",
    "0x6D",
    "0x6E",
    "0x6F",
    "0x71",
    "0x72",
    "0x73",
    "0x74",
    "0x75",
    "0x76",
    "0x77",
    "0x78",
    "0x79",
    "0x7A",
    "0x7B",
    "0x7C",
    "0x7D",
    "0x7E",
    "0x7F"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     62,
     25,
     3
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "pca9685",
    "servo driver",
    "pwm driver",
    "16 channel",
    "servo",
    "driver servo"
   ],
   "sources": [
    {
     "title": "NXP PCA9685 datasheet",
     "section": "Device address 1 A5 A4 A3 A2 A1 A0 (0x40 to 0x7F); 0x70 is the All Call address"
    }
   ]
  },
  {
   "id": "pcf8563-rtc",
   "name": "PCF8563 real-time clock module",
   "category": "sensor",
   "measures": [
    "time"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Alarm / timer output, open drain, optional"
    },
    {
     "name": "CLKOUT",
     "role": "passive",
     "notes": "Clock output (32.768 kHz), not needed"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x51"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     25,
     20,
     10
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "pcf8563",
    "rtc",
    "real time clock",
    "clock",
    "orologio",
    "ora"
   ],
   "sources": [
    {
     "title": "NXP PCF8563 datasheet",
     "section": "Slave address A2h/A3h (7-bit 0x51); INT open drain; supply 1.0 to 5.5 V"
    },
    {
     "title": "Common PCF8563 modules",
     "section": "Header order varies between boards: check the silkscreen"
    }
   ]
  },
  {
   "id": "pcf8574-expander",
   "name": "PCF8574 I/O expander module",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "P0",
     "role": "passive",
     "notes": "Expander I/O pins go to your LEDs or buttons, not to the ESP32"
    },
    {
     "name": "P1",
     "role": "passive"
    },
    {
     "name": "P2",
     "role": "passive"
    },
    {
     "name": "P3",
     "role": "passive"
    },
    {
     "name": "P4",
     "role": "passive"
    },
    {
     "name": "P5",
     "role": "passive"
    },
    {
     "name": "P6",
     "role": "passive"
    },
    {
     "name": "P7",
     "role": "passive"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x20",
    "0x21",
    "0x22",
    "0x23",
    "0x24",
    "0x25",
    "0x26",
    "0x27",
    "0x38",
    "0x39",
    "0x3A",
    "0x3B",
    "0x3C",
    "0x3D",
    "0x3E",
    "0x3F"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     40,
     20,
     5
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "pcf8574",
    "io expander",
    "i2c expander",
    "gpio",
    "espansore"
   ],
   "sources": [
    {
     "title": "NXP PCF8574 / PCF8574A datasheet",
     "section": "Address 0x20 to 0x27 (PCF8574) or 0x38 to 0x3F (PCF8574A) via A0-A2"
    }
   ]
  },
  {
   "id": "pcf8591-adc",
   "name": "PCF8591 ADC/DAC module (YL-40)",
   "category": "sensor",
   "measures": [
    "voltage"
   ],
   "pins": [
    {
     "name": "AOUT",
     "role": "passive",
     "notes": "DAC output (8-bit), optional"
    },
    {
     "name": "AIN0",
     "role": "passive",
     "notes": "Analog input 0. On-board jumpers join a light sensor, thermistor and pot to some inputs"
    },
    {
     "name": "AIN1",
     "role": "passive"
    },
    {
     "name": "AIN2",
     "role": "passive"
    },
    {
     "name": "AIN3",
     "role": "passive"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x48",
    "0x49",
    "0x4A",
    "0x4B",
    "0x4C",
    "0x4D",
    "0x4E",
    "0x4F"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     36,
     26,
     10
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "pcf8591",
    "yl-40",
    "adc",
    "dac",
    "8 bit",
    "convertitore",
    "analogico"
   ],
   "sources": [
    {
     "title": "NXP PCF8591 datasheet",
     "section": "Address 1001 A2 A1 A0 (0x48 to 0x4F, module uses 0x48); supply 2.5 to 6 V"
    }
   ]
  },
  {
   "id": "pcm5102a-dac",
   "name": "PCM5102A I2S stereo DAC",
   "category": "output",
   "pins": [
    {
     "name": "SCK",
     "role": "ground",
     "notes": "System clock: connect to GND so the chip makes it from BCK"
    },
    {
     "name": "BCK",
     "role": "spi_sck",
     "notes": "I2S bit clock, not SPI"
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "I2S audio data from the ESP32"
    },
    {
     "name": "LCK",
     "role": "spi_cs",
     "notes": "I2S word select (LRCK), not SPI"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VIN",
     "role": "power",
     "notes": "3.3 V or 5 V. XSMT (solder jumper on the back) must be HIGH or the output stays muted"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "breakout",
    "size": [
     32,
     23,
     8
    ],
    "color": "#6A3FA0"
   },
   "keywords": [
    "pcm5102a",
    "pcm5102",
    "i2s",
    "dac",
    "audio",
    "line out",
    "convertitore audio"
   ],
   "sources": [
    {
     "title": "Texas Instruments PCM5102A datasheet",
     "section": "Audio interface BCK, LRCK, DIN; SCK can be omitted (PLL from BCK); XSMT soft mute"
    }
   ]
  },
  {
   "id": "ph-4502c",
   "name": "PH-4502C pH sensor module",
   "category": "sensor",
   "measures": [
    "ph"
   ],
   "pins": [
    {
     "name": "TO",
     "role": "analog_out",
     "notes": "Board temperature (not the liquid), optional"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Threshold output, set by a trimmer. Its HIGH level is 5 V: use a voltage divider"
    },
    {
     "name": "PO",
     "role": "analog_out",
     "notes": "pH voltage, about 2.5 V at pH 7 after calibration, up to 5 V: use a voltage divider"
    },
    {
     "name": "GND1",
     "role": "ground",
     "notes": "First G pin"
    },
    {
     "name": "GND2",
     "role": "ground",
     "notes": "Second G pin"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked V+. Needs 5 V: use VIN"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     43,
     32,
     15
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ph-4502c",
    "ph meter",
    "ph probe",
    "bnc",
    "water quality",
    "sonda ph",
    "qualità acqua"
   ],
   "sources": [
    {
     "title": "PH-4502C module seller sheet",
     "section": "Header To, Do, Po, G, G, V+; 5 V supply; BNC probe input"
    },
    {
     "title": "PH-4502C module seller sheet",
     "section": "Needs calibration with pH 4 and pH 7 buffer solutions"
    }
   ]
  },
  {
   "id": "photoresistor",
   "name": "Photoresistor (LDR) with 10 kΩ divider",
   "category": "sensor",
   "measures": [
    "light"
   ],
   "pins": [
    {
     "name": "1",
     "role": "power",
     "notes": "One LDR leg to 3V3"
    },
    {
     "name": "2",
     "role": "analog_out",
     "notes": "Other leg to an ADC pin and through 10 kΩ to GND. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3",
   "model": {
    "shape": "led",
    "size": [
     6.1,
     5,
     4
    ],
    "color": "#C8A04A"
   },
   "keywords": [
    "ldr",
    "photoresistor",
    "photocell",
    "light",
    "fotoresistenza",
    "luce"
   ],
   "sources": [
    {
     "title": "Espressif ESP32 Technical Reference Manual",
     "section": "ADC: input range and attenuation"
    }
   ]
  },
  {
   "id": "piezo-disc",
   "name": "Piezo disc 27 mm",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Red wire. To a PWM-capable GPIO (ledc / tone). Quiet: a piezo needs a high voltage to be loud"
    },
    {
     "name": "-",
     "role": "ground",
     "notes": "Black wire"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "led",
    "size": [
     27,
     27,
     0.5
    ],
    "color": "#D9B45A"
   },
   "keywords": [
    "piezo",
    "piezo disc",
    "buzzer",
    "knock",
    "tone",
    "disco piezoelettrico",
    "cicalino"
   ],
   "sources": [
    {
     "title": "Murata piezoelectric sounder (7BB-27-4) datasheet",
     "section": "Resonant frequency about 4.6 kHz"
    },
    {
     "title": "Espressif ESP-IDF Programming Guide",
     "section": "LEDC (LED PWM controller)"
    }
   ]
  },
  {
   "id": "pms5003",
   "name": "PMS5003 particulate matter sensor",
   "category": "sensor",
   "measures": [
    "particulates"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the fan: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SET",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "HIGH or unconnected = working, LOW = sleep (3.3 V logic)"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the part receives data here. Connect to an ESP32 TX pin"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin (9600 baud, 3.3 V level)"
    },
    {
     "name": "RESET",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW. Optional"
    },
    {
     "name": "NC1",
     "role": "passive",
     "notes": "Not connected"
    },
    {
     "name": "NC2",
     "role": "passive",
     "notes": "Not connected"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     50,
     38,
     21
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "pms5003",
    "plantower",
    "pm2.5",
    "pm10",
    "dust",
    "particulate",
    "polveri sottili",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Plantower PMS5003 datasheet",
     "section": "Pin 1 VCC, 2 GND, 3 SET, 4 RX, 5 TX, 6 RESET, 7-8 NC; 3.3 V logic"
    }
   ]
  },
  {
   "id": "pmsa003i",
   "name": "PMSA003I particulate matter sensor (I2C)",
   "category": "sensor",
   "measures": [
    "particulates"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "Needs 5 V for the fan: use VIN"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x12"
   ],
   "voltage": "5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     38,
     38,
     21
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "pmsa003i",
    "plantower",
    "pm2.5",
    "pm10",
    "dust",
    "particulate",
    "polveri sottili",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Plantower PMSA003I datasheet",
     "section": "I2C address 0x12; supply 5 V for the fan, 3.3 V logic"
    },
    {
     "title": "Adafruit PMSA003I guide",
     "section": "Pinout VIN, 3Vo, GND, SCL, SDA"
    }
   ]
  },
  {
   "id": "pn5180-nfc",
   "name": "PN5180 NFC reader (13.56 MHz, ISO 15693)",
   "category": "input",
   "pins": [
    {
     "name": "5V",
     "role": "passive",
     "notes": "RF supply: connect to VIN (5 V). The reader needs both 5 V and 3.3 V"
    },
    {
     "name": "3.3V",
     "role": "power",
     "notes": "Logic supply: connect to 3V3"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW"
    },
    {
     "name": "NSS",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "BUSY",
     "role": "digital_out",
     "notes": "HIGH while the chip is busy. Wait for LOW before each SPI command"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "GPIO",
     "role": "passive",
     "notes": "Not needed"
    },
    {
     "name": "IRQ",
     "role": "int",
     "notes": "Interrupt, optional"
    },
    {
     "name": "AUX",
     "role": "passive",
     "notes": "Test output, not needed"
    },
    {
     "name": "REQ",
     "role": "passive",
     "notes": "Firmware download only. Leave unconnected"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     60,
     40,
     4
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "pn5180",
    "nfc",
    "rfid",
    "iso15693",
    "iso14443",
    "lettore nfc",
    "tag"
   ],
   "sources": [
    {
     "title": "NXP PN5180 datasheet",
     "section": "SPI host interface with BUSY line; logic supply 3.3 V, RF supply up to 5 V"
    },
    {
     "title": "Common PN5180 breakout",
     "section": "Header +5V, +3.3V, RST, NSS, MOSI, MISO, SCK, BUSY, GND, GPIO, IRQ, AUX, REQ. Check the silkscreen"
    }
   ]
  },
  {
   "id": "pn532-nfc",
   "name": "PN532 NFC/RFID module (I2C)",
   "category": "input",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x24"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "module",
    "size": [
     42.7,
     40.4,
     4
    ],
    "color": "#B22222"
   },
   "keywords": [
    "pn532",
    "nfc",
    "rfid",
    "elechouse",
    "card reader",
    "lettore nfc"
   ],
   "sources": [
    {
     "title": "NXP PN532 user manual",
     "section": "I2C address 0x48 8-bit (0x24 7-bit)"
    },
    {
     "title": "Elechouse PN532 NFC module v3 manual",
     "section": "Mode switches: I2C = switch 1 ON, switch 2 OFF"
    }
   ]
  },
  {
   "id": "water-pressure-transducer",
   "name": "Pressure transducer 0.5-4.5 V (water / air)",
   "category": "sensor",
   "measures": [
    "pressure"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire. Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "Yellow, blue or green wire. 0.5 V (0 pressure) to 4.5 V (full scale): use a voltage divider before the ADC"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     22,
     22,
     40
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "pressure transducer",
    "water pressure",
    "g1/4",
    "mpa",
    "psi",
    "trasduttore",
    "pressione acqua"
   ],
   "sources": [
    {
     "title": "Generic G1/4 pressure transducer seller sheet",
     "section": "Supply 5 V, output 0.5 to 4.5 V, linear over the rated range (for example 0 to 1.2 MPa)"
    }
   ]
  },
  {
   "id": "pulse-sensor",
   "name": "Pulse Sensor (analog heart rate)",
   "category": "sensor",
   "measures": [
    "heart rate"
   ],
   "pins": [
    {
     "name": "S",
     "role": "analog_out",
     "notes": "Purple wire. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire. Use 3V3"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     16,
     16,
     3
    ],
    "color": "#2E6FD8"
   },
   "keywords": [
    "pulse sensor",
    "heart rate",
    "pulsesensor",
    "bpm",
    "battito",
    "cardiaco"
   ],
   "sources": [
    {
     "title": "World Famous Electronics PulseSensor.com",
     "section": "Wiring: purple signal, red +V (3 to 5 V), black GND"
    }
   ]
  },
  {
   "id": "push-button",
   "name": "Push button",
   "category": "input",
   "pins": [
    {
     "name": "1",
     "role": "digital_out",
     "notes": "To a GPIO; use INPUT_PULLUP in code"
    },
    {
     "name": "2",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "button",
    "size": [
     6,
     6,
     5
    ],
    "color": "#2B2B2B"
   },
   "keywords": [
    "button",
    "switch",
    "push",
    "tactile"
   ],
   "sources": [
    {
     "title": "Arduino reference",
     "section": "pinMode INPUT_PULLUP"
    }
   ],
   "starterSketch": "button"
  },
  {
   "id": "pzem-004t-v3",
   "name": "PZEM-004T v3 AC energy meter (UART)",
   "category": "sensor",
   "measures": [
    "voltage",
    "current",
    "power",
    "energy",
    "frequency",
    "power factor"
   ],
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "TTL side supply. Isolated from mains by optocouplers"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the meter receives data here. Connect to an ESP32 TX pin (9600 baud, Modbus RTU)"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART: the meter sends here. Idles at the 5 V supply: add a divider before the ESP32 RX pin"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "L",
     "role": "passive",
     "notes": "MAINS 230 V! Only a qualified person connects this. Never to the ESP32"
    },
    {
     "name": "N",
     "role": "passive",
     "notes": "MAINS 230 V! Only a qualified person connects this. Never to the ESP32"
    },
    {
     "name": "CT+",
     "role": "passive",
     "notes": "Current transformer lead (100 A version). The measured wire passes through the CT"
    },
    {
     "name": "CT-",
     "role": "passive",
     "notes": "Current transformer lead (100 A version)"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     73,
     32,
     24
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "pzem-004t",
    "pzem",
    "energy meter",
    "ac power",
    "mains",
    "contatore",
    "energia",
    "rete elettrica"
   ],
   "sources": [
    {
     "title": "Peacefair PZEM-004T V3.0 user manual",
     "section": "Measures voltage 80 to 260 V, current, power, energy, frequency, power factor"
    },
    {
     "title": "Peacefair PZEM-004T V3.0 user manual",
     "section": "TTL serial 9600 baud, Modbus-RTU; TTL side powered with 5 V"
    }
   ]
  },
  {
   "id": "rain-gauge",
   "name": "Rain gauge (tipping bucket)",
   "category": "sensor",
   "measures": [
    "rain"
   ],
   "pins": [
    {
     "name": "1",
     "role": "digital_out",
     "notes": "To a GPIO with INPUT_PULLUP. One short closure per bucket tip (0.2794 mm of rain). Debounce it"
    },
    {
     "name": "2",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     60,
     60,
     40
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "rain gauge",
    "tipping bucket",
    "weather station",
    "pluviometro",
    "pioggia",
    "meteo"
   ],
   "sources": [
    {
     "title": "SparkFun Weather Meter Kit datasheet (SEN-15901)",
     "section": "Rain gauge: reed switch closes once per tip, 0.2794 mm (0.011 in) of rain"
    }
   ]
  },
  {
   "id": "rain-sensor",
   "name": "Rain sensor module (FC-37 / YL-83)",
   "category": "sensor",
   "measures": [
    "rain"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3 so AO stays within the ADC range"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "LOW when rain is detected (threshold set with the trimmer)"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Lower voltage means more water. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     30,
     16,
     8
    ],
    "color": "#B22222"
   },
   "keywords": [
    "rain",
    "fc-37",
    "yl-83",
    "raindrop",
    "pioggia",
    "sensore pioggia"
   ],
   "sources": [
    {
     "title": "Texas Instruments LM393 datasheet",
     "section": "Comparator output (DO)"
    }
   ]
  },
  {
   "id": "rc522-rfid",
   "name": "RC522 RFID reader (13.56 MHz)",
   "category": "input",
   "pins": [
    {
     "name": "SDA",
     "role": "spi_cs",
     "notes": "This is the SPI chip select (CS), despite the SDA label"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "IRQ",
     "role": "int",
     "notes": "Interrupt, optional. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW"
    },
    {
     "name": "3.3V",
     "role": "power",
     "notes": "3.3 V only. Never 5 V"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     60,
     39,
     3
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "rc522",
    "mfrc522",
    "rfid",
    "nfc",
    "card reader",
    "tag",
    "lettore rfid",
    "badge"
   ],
   "sources": [
    {
     "title": "NXP MFRC522 datasheet",
     "section": "SPI interface; supply 2.5 to 3.6 V"
    }
   ]
  },
  {
   "id": "rcwl-0516",
   "name": "RCWL-0516 microwave motion radar",
   "category": "sensor",
   "measures": [
    "motion"
   ],
   "pins": [
    {
     "name": "3V3",
     "role": "passive",
     "notes": "Output of the on-board regulator (100 mA max). Do not feed power here"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "3.3 V HIGH for about 2 s after motion"
    },
    {
     "name": "VIN",
     "role": "power",
     "notes": "4 to 28 V: use VIN (5 V)"
    },
    {
     "name": "CDS",
     "role": "passive",
     "notes": "Optional light sensor input. Leave unconnected"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     36,
     17,
     3
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "rcwl-0516",
    "radar",
    "microwave",
    "doppler",
    "motion",
    "movimento",
    "presenza"
   ],
   "sources": [
    {
     "title": "RCWL-0516 module description (RCWL / jdesbonnet GitHub notes)",
     "section": "Pins 3V3, GND, OUT, VIN, CDS; VIN 4 to 28 V; OUT 3.3 V"
    }
   ]
  },
  {
   "id": "rdm6300-rfid",
   "name": "RDM6300 125 kHz RFID reader",
   "category": "input",
   "pins": [
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "UART 9600 baud at 5 V level: use a voltage divider to an ESP32 RX pin"
    },
    {
     "name": "RX",
     "role": "passive",
     "notes": "Not used"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Not connected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "5V",
     "role": "power",
     "notes": "5 V only"
    },
    {
     "name": "ANT1",
     "role": "passive",
     "notes": "Antenna coil"
    },
    {
     "name": "ANT2",
     "role": "passive",
     "notes": "Antenna coil"
    },
    {
     "name": "LED",
     "role": "passive",
     "notes": "Card indicator output, optional"
    },
    {
     "name": "VCC2",
     "role": "passive",
     "notes": "Second 5 V pin (same as 5V)"
    },
    {
     "name": "GND2",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     38.5,
     19,
     9
    ],
    "color": "#1E7B3A"
   },
   "keywords": [
    "rdm6300",
    "rfid",
    "125 khz",
    "em4100",
    "tag",
    "badge",
    "lettore rfid"
   ],
   "sources": [
    {
     "title": "Seeed RDM6300 125 kHz card reader module datasheet",
     "section": "P1: TX, RX, NC, GND, +5V; P2: antenna; P3: LED, +5V, GND; UART 9600 8N1"
    }
   ]
  },
  {
   "id": "reed-switch",
   "name": "Reed switch (magnetic)",
   "category": "input",
   "pins": [
    {
     "name": "1",
     "role": "digital_out",
     "notes": "To a GPIO; use INPUT_PULLUP. Closes when a magnet is near"
    },
    {
     "name": "2",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "button",
    "size": [
     14,
     3,
     3
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "reed switch",
    "magnet",
    "door sensor",
    "reed",
    "interruttore magnetico",
    "porta"
   ],
   "sources": [
    {
     "title": "Arduino reference",
     "section": "pinMode INPUT_PULLUP"
    }
   ]
  },
  {
   "id": "relay-1ch",
   "name": "Relay module 1 channel (5 V)",
   "category": "output",
   "pins": [
    {
     "name": "IN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Many modules switch on with IN LOW. Some do not react to 3.3 V: check with a test"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V for the coil: use VIN"
    },
    {
     "name": "COM",
     "role": "passive",
     "notes": "Relay common contact. Mains voltage is dangerous"
    },
    {
     "name": "NO",
     "role": "passive",
     "notes": "Normally open contact"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Normally closed contact"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "relay",
    "size": [
     50,
     26,
     19
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "relay",
    "1 channel",
    "srd-05vdc",
    "switch",
    "relè",
    "interruttore"
   ],
   "sources": [
    {
     "title": "Songle SRD-05VDC-SL-C datasheet",
     "section": "Coil 5 V, about 70 mA"
    }
   ]
  },
  {
   "id": "relay-2ch",
   "name": "Relay module 2 channels (5 V, optocoupler)",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "IN1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "LOW = relay on (typical)"
    },
    {
     "name": "IN2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "LOW = relay on (typical)"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "JD-VCC",
     "role": "passive",
     "notes": "Separate coil supply. Keep the jumper to VCC unless you use an isolated supply"
    },
    {
     "name": "COM1",
     "role": "passive"
    },
    {
     "name": "NO1",
     "role": "passive"
    },
    {
     "name": "NC1",
     "role": "passive"
    },
    {
     "name": "COM2",
     "role": "passive"
    },
    {
     "name": "NO2",
     "role": "passive"
    },
    {
     "name": "NC2",
     "role": "passive"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "relay",
    "size": [
     51,
     39,
     19
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "relay",
    "2 channel",
    "dual relay",
    "optocoupler",
    "relè",
    "doppio relè"
   ],
   "sources": [
    {
     "title": "Songle SRD-05VDC-SL-C datasheet",
     "section": "Coil 5 V, about 70 mA per channel"
    }
   ]
  },
  {
   "id": "relay-4ch",
   "name": "Relay module 4 channels (5 V, optocoupler)",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "IN1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "LOW = relay on (typical)"
    },
    {
     "name": "IN2",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN3",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN4",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "JD-VCC",
     "role": "passive",
     "notes": "Separate coil supply. Keep the jumper to VCC unless you use an isolated supply"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "relay",
    "size": [
     75,
     55,
     19
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "relay",
    "4 channel",
    "relay board",
    "optocoupler",
    "relè",
    "scheda relè"
   ],
   "sources": [
    {
     "title": "Songle SRD-05VDC-SL-C datasheet",
     "section": "Coil 5 V, about 70 mA per channel"
    }
   ]
  },
  {
   "id": "relay-8ch",
   "name": "Relay module 8 channels (5 V, optocoupler)",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "IN1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "LOW = relay on (typical). Each relay has COM/NO/NC screw terminals"
    },
    {
     "name": "IN2",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN3",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN4",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN5",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN6",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN7",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN8",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN. All 8 coils on: about 0.6 A, more than USB likes"
    },
    {
     "name": "JD-VCC",
     "role": "passive",
     "notes": "Separate coil supply. Keep the jumper to VCC unless you use an isolated supply"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "relay",
    "size": [
     80,
     56,
     19
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "relay",
    "8 channel",
    "relay board",
    "optocoupler",
    "relè",
    "scheda relè"
   ],
   "sources": [
    {
     "title": "Songle SRD-05VDC-SL-C datasheet",
     "section": "Coil 5 V, about 70 mA per channel"
    }
   ]
  },
  {
   "id": "soil-moisture-resistive",
   "name": "Resistive soil moisture sensor (YL-69 / FC-28)",
   "category": "sensor",
   "measures": [
    "soil moisture"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3 so AO stays within the ADC range"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Changes level at the threshold set with the trimmer"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     30,
     16,
     8
    ],
    "color": "#B22222"
   },
   "keywords": [
    "yl-69",
    "fc-28",
    "soil moisture",
    "resistive",
    "umidità terreno",
    "terreno"
   ],
   "sources": [
    {
     "title": "Texas Instruments LM393 datasheet",
     "section": "Comparator output (DO)"
    },
    {
     "title": "Espressif ESP32 Technical Reference Manual",
     "section": "ADC: input range"
    }
   ]
  },
  {
   "id": "rfm95w-lora",
   "name": "RFM95W LoRa breakout (SX1276, 868/915 MHz)",
   "category": "output",
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "On-board regulator: 3.3 to 6 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "EN",
     "role": "passive",
     "notes": "Regulator enable, pulled up. Leave unconnected"
    },
    {
     "name": "G0",
     "role": "int",
     "notes": "DIO0: TX done / RX done interrupt"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "CS",
     "role": "spi_cs",
     "notes": "SPI chip select (NSS)"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW"
    },
    {
     "name": "G1",
     "role": "int",
     "notes": "DIO1, optional"
    },
    {
     "name": "G2",
     "role": "passive",
     "notes": "DIO2, usually unused"
    },
    {
     "name": "G3",
     "role": "passive"
    },
    {
     "name": "G4",
     "role": "passive"
    },
    {
     "name": "G5",
     "role": "passive"
    },
    {
     "name": "ANT",
     "role": "passive",
     "notes": "Antenna pad. Always connect an antenna before transmitting"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     39.1,
     25,
     4
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "rfm95w",
    "rfm95",
    "sx1276",
    "lora",
    "868 mhz",
    "915 mhz",
    "lorawan",
    "long range",
    "radio"
   ],
   "sources": [
    {
     "title": "Semtech SX1276/77/78/79 datasheet",
     "section": "SPI interface; DIO0 to DIO5 mapping; supply 1.8 to 3.7 V"
    },
    {
     "title": "Adafruit RFM69HCW and RFM9X LoRa Packet Radio Breakouts guide",
     "section": "Pinouts (VIN, GND, EN, G0 to G5, SCK, MISO, MOSI, CS, RST)"
    }
   ]
  },
  {
   "id": "rgb-led-ca",
   "name": "RGB LED (common anode)",
   "category": "output",
   "pins": [
    {
     "name": "R",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Red, through a 220 Ω resistor. LOW = on"
    },
    {
     "name": "+",
     "role": "power",
     "notes": "Longest leg, common anode: to 3V3"
    },
    {
     "name": "G",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Green, through a 220 Ω resistor. LOW = on"
    },
    {
     "name": "B",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Blue, through a 220 Ω resistor. LOW = on"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "led",
    "size": [
     11.2,
     5,
     8.6
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "rgb led",
    "common anode",
    "led",
    "color",
    "led rgb",
    "anodo comune"
   ],
   "sources": [
    {
     "title": "Generic 5 mm RGB LED datasheet",
     "section": "Leg order R, common (longest), G, B"
    }
   ]
  },
  {
   "id": "rgb-led-cc",
   "name": "RGB LED (common cathode)",
   "category": "output",
   "pins": [
    {
     "name": "R",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Red, through a 220 Ω resistor"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Longest leg, common cathode"
    },
    {
     "name": "G",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Green, through a 220 Ω resistor"
    },
    {
     "name": "B",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Blue, through a 220 Ω resistor"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "led",
    "size": [
     11.2,
     5,
     8.6
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "rgb led",
    "common cathode",
    "led",
    "color",
    "led rgb",
    "catodo comune"
   ],
   "sources": [
    {
     "title": "Generic 5 mm RGB LED datasheet",
     "section": "Leg order R, common (longest), G, B"
    }
   ]
  },
  {
   "id": "rotary-encoder-ky040",
   "name": "Rotary encoder (KY-040)",
   "category": "input",
   "pins": [
    {
     "name": "CLK",
     "role": "digital_out",
     "notes": "Encoder output A"
    },
    {
     "name": "DT",
     "role": "digital_out",
     "notes": "Encoder output B"
    },
    {
     "name": "SW",
     "role": "digital_out",
     "notes": "Push button: LOW when pressed"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked + on the board. Use 3V3: the on-board pull-ups go to this pin"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     26,
     19,
     30
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "rotary encoder",
    "ky-040",
    "encoder",
    "knob",
    "manopola",
    "encoder rotativo"
   ],
   "sources": [
    {
     "title": "Joy-IT KY-040 datasheet",
     "section": "Pins CLK, DT, SW, +, GND"
    }
   ]
  },
  {
   "id": "rv3028-rtc",
   "name": "RV-3028 real-time clock breakout",
   "category": "sensor",
   "measures": [
    "time"
   ],
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "3V3",
     "role": "power"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Alarm / timer interrupt, optional"
    },
    {
     "name": "CLK",
     "role": "passive",
     "notes": "Clock output, not needed"
    },
    {
     "name": "EVI",
     "role": "passive",
     "notes": "Event input (timestamp), optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x52"
   ],
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     25.4,
     3
    ],
    "color": "#B22222"
   },
   "keywords": [
    "rv-3028",
    "rv3028",
    "micro crystal",
    "rtc",
    "real time clock",
    "low power",
    "orologio"
   ],
   "sources": [
    {
     "title": "Micro Crystal RV-3028-C7 application manual",
     "section": "I2C address 1010010 (0x52); supply 1.1 to 5.5 V; 45 nA timekeeping"
    },
    {
     "title": "SparkFun Real Time Clock Module RV-3028 (Qwiic) hookup guide",
     "section": "Pins GND, 3.3V, SDA, SCL, INT, CLK, EVI. Check the silkscreen"
    }
   ]
  },
  {
   "id": "scd40",
   "name": "SCD40 CO2 sensor",
   "category": "sensor",
   "measures": [
    "co2",
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x62"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     18,
     18,
     7
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "scd40",
    "scd41",
    "sensirion",
    "co2",
    "carbon dioxide",
    "anidride carbonica",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Sensirion SCD4x datasheet",
     "section": "I2C address 0x62; supply 2.4 to 5.5 V"
    }
   ]
  },
  {
   "id": "sct-013",
   "name": "SCT-013 split-core AC current clamp",
   "category": "sensor",
   "measures": [
    "current"
   ],
   "pins": [
    {
     "name": "TIP",
     "role": "passive",
     "notes": "3.5 mm jack. AC output: needs a bias circuit (2 x 10 kΩ + 10 µF) before an ADC pin. -000 also needs a burden resistor"
    },
    {
     "name": "SLEEVE",
     "role": "passive",
     "notes": "3.5 mm jack. Goes to the bias midpoint (about 1.65 V), not straight to GND"
    }
   ],
   "bus": "analog",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     30,
     45,
     16
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "sct-013",
    "sct013",
    "current clamp",
    "current transformer",
    "ct",
    "pinza amperometrica",
    "corrente"
   ],
   "sources": [
    {
     "title": "YHDC SCT-013 datasheet",
     "section": "SCT-013-000: 100 A : 50 mA current output, no burden; -030: 30 A / 1 V with built-in burden"
    },
    {
     "title": "OpenEnergyMonitor CT sensor guide",
     "section": "Burden resistor and DC bias for a single-supply ADC"
    }
   ]
  },
  {
   "id": "sd-card-module",
   "name": "SD card module (full size, SPI)",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "3V3",
     "role": "power",
     "notes": "Use 3V3 or 5V, not both"
    },
    {
     "name": "5V",
     "role": "passive",
     "notes": "Alternative 5 V input through the on-board regulator"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "GND2",
     "role": "ground"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     52,
     30,
     5
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "sd card",
    "sd card module",
    "lc studio",
    "storage",
    "data logger",
    "scheda sd",
    "memoria"
   ],
   "sources": [
    {
     "title": "SD Association Physical Layer Simplified Specification",
     "section": "SPI mode; card supply 2.7 to 3.6 V"
    },
    {
     "title": "LC Studio SD card module",
     "section": "Header GND, 3.3V, 5V, CS, MOSI, SCK, MISO, GND"
    }
   ]
  },
  {
   "id": "scd30",
   "name": "Sensirion SCD30 CO2 sensor",
   "category": "sensor",
   "measures": [
    "co2",
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power",
     "notes": "Pin 1"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin 2"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "Pin 3 (TX/SCL). The sensor stretches the clock: use 50 kHz or less"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "Pin 4 (RX/SDA)"
    },
    {
     "name": "RDY",
     "role": "int",
     "notes": "Pin 5. HIGH when a new reading is ready, optional"
    },
    {
     "name": "PWM",
     "role": "digital_out",
     "notes": "Pin 6. PWM CO2 output, optional"
    },
    {
     "name": "SEL",
     "role": "passive",
     "notes": "Pin 7. Leave open or LOW for I2C; HIGH selects Modbus"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x61"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     35,
     23,
     7
    ],
    "color": "#1E7A3C"
   },
   "keywords": [
    "scd30",
    "sensirion",
    "co2",
    "ndir",
    "carbon dioxide",
    "anidride carbonica",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Sensirion SCD30 datasheet",
     "section": "Pin 1 VDD, 2 GND, 3 TX/SCL, 4 RX/SDA, 5 RDY, 6 PWM, 7 SEL; supply 3.3 to 5.5 V"
    },
    {
     "title": "Sensirion SCD30 interface description",
     "section": "I2C address 0x61, max 100 kHz, clock stretching up to 150 ms"
    }
   ]
  },
  {
   "id": "sen55",
   "name": "Sensirion SEN55 environmental node",
   "category": "sensor",
   "measures": [
    "particulates",
    "voc",
    "nox",
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power",
     "notes": "Pin 1. Needs 5 V for the fan: use VIN"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin 2"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "Pin 3. Add a pull-up to 3.3 V"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "Pin 4. Add a pull-up to 3.3 V"
    },
    {
     "name": "SEL",
     "role": "passive",
     "notes": "Pin 5. Connect to GND for I2C"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Pin 6. Not connected"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x69"
   ],
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     40.6,
     40.6,
     12
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "sen55",
    "sen54",
    "sensirion",
    "pm2.5",
    "voc",
    "nox",
    "polveri sottili",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Sensirion SEN5x datasheet",
     "section": "Pin 1 VDD 5 V, 2 GND, 3 SDA, 4 SCL, 5 SEL, 6 NC; I2C address 0x69, 100 kHz"
    },
    {
     "title": "Sensirion SEN5x datasheet",
     "section": "I2C lines are 3.3 V level; VOC and NOx are index values, not ppm"
    }
   ]
  },
  {
   "id": "sps30",
   "name": "Sensirion SPS30 particulate matter sensor",
   "category": "sensor",
   "measures": [
    "particulates"
   ],
   "pins": [
    {
     "name": "VDD",
     "role": "power",
     "notes": "Pin 1. Needs 5 V: use VIN"
    },
    {
     "name": "SDA",
     "role": "i2c_sda",
     "notes": "Pin 2 (RX/SDA). Add a pull-up to 3.3 V, not 5 V"
    },
    {
     "name": "SCL",
     "role": "i2c_scl",
     "notes": "Pin 3 (TX/SCL). Add a pull-up to 3.3 V, not 5 V"
    },
    {
     "name": "SEL",
     "role": "passive",
     "notes": "Pin 4. Connect to GND to select I2C; leave open for UART"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin 5"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x69"
   ],
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     41,
     41,
     12
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "sps30",
    "sensirion",
    "pm2.5",
    "pm10",
    "dust",
    "particulate",
    "polveri sottili",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Sensirion SPS30 datasheet",
     "section": "Pin 1 VDD, 2 RX/SDA, 3 TX/SCL, 4 SEL, 5 GND; supply 5 V"
    },
    {
     "title": "Sensirion SPS30 datasheet",
     "section": "I2C address 0x69, max 100 kHz, external pull-ups needed"
    }
   ]
  },
  {
   "id": "servo-sg90",
   "name": "SG90 micro servo",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Brown wire"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire, 5 V: use VIN. Can reset the ESP32 if powered from USB alone under load"
    },
    {
     "name": "SIG",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Orange wire. 50 Hz PWM, 0.5 to 2.4 ms pulses"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "motor",
    "size": [
     23,
     12.2,
     29
    ],
    "color": "#2E6FD8"
   },
   "keywords": [
    "sg90",
    "servo",
    "micro servo",
    "motor",
    "servomotore",
    "motore"
   ],
   "sources": [
    {
     "title": "Tower Pro SG90 datasheet",
     "section": "Wires: brown GND, red +5 V, orange PWM; 50 Hz, 1 to 2 ms"
    }
   ]
  },
  {
   "id": "sgp30",
   "name": "SGP30 eCO2 + TVOC",
   "category": "sensor",
   "measures": [
    "eco2",
    "tvoc"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x58"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     15,
     13,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "sgp30",
    "sensirion",
    "eco2",
    "tvoc",
    "air quality",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Sensirion SGP30 datasheet",
     "section": "I2C address 0x58 (fixed)"
    }
   ]
  },
  {
   "id": "sgp40",
   "name": "SGP40 VOC sensor",
   "category": "sensor",
   "measures": [
    "voc"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x59"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "sgp40",
    "sensirion",
    "voc",
    "voc index",
    "air quality",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Sensirion SGP40 datasheet",
     "section": "I2C address 0x59; chip supply 1.7 to 3.6 V"
    },
    {
     "title": "Sensirion SGP40 datasheet",
     "section": "Gives a raw signal; the VOC index needs Sensirion’s gas index algorithm"
    }
   ]
  },
  {
   "id": "sgp41",
   "name": "SGP41 VOC + NOx sensor",
   "category": "sensor",
   "measures": [
    "voc",
    "nox"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Chip supply 1.7 to 3.6 V: use 3V3"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x59"
   ],
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     15,
     12,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "sgp41",
    "sensirion",
    "voc",
    "nox",
    "air quality",
    "qualità aria"
   ],
   "sources": [
    {
     "title": "Sensirion SGP41 datasheet",
     "section": "I2C address 0x59; supply 1.7 to 3.6 V"
    },
    {
     "title": "Sensirion SGP41 datasheet",
     "section": "Raw signals; VOC and NOx indexes need Sensirion’s gas index algorithm"
    }
   ]
  },
  {
   "id": "sh1106-oled",
   "name": "SH1106 OLED 1.3\" 128x64 (I2C)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Some 1.3\" boards swap VCC and GND: check the labels before powering"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x3C",
    "0x3D"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "oled",
    "size": [
     35,
     34,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "oled",
    "sh1106",
    "1.3",
    "128x64",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Sino Wealth SH1106 datasheet",
     "section": "I2C interface: slave address 011110 SA0 (0x3C / 0x3D)"
    }
   ]
  },
  {
   "id": "gp2y0a02",
   "name": "Sharp GP2Y0A02 IR distance (20-150 cm)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "VO",
     "role": "analog_out",
     "notes": "Output about 0.4 V (150 cm) to 2.8 V (20 cm). To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     37,
     13,
     21.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "gp2y0a02",
    "gp2y0a02yk0f",
    "sharp",
    "ir distance",
    "infrared",
    "distanza",
    "infrarossi"
   ],
   "sources": [
    {
     "title": "Sharp GP2Y0A02YK0F datasheet",
     "section": "Terminal 1 Vo, 2 GND, 3 Vcc; supply 4.5 to 5.5 V; range 20 to 150 cm"
    }
   ]
  },
  {
   "id": "gp2y0a21",
   "name": "Sharp GP2Y0A21 IR distance (10-80 cm)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "VO",
     "role": "analog_out",
     "notes": "Output about 0.4 V (80 cm) to 3.1 V (10 cm). To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     29.5,
     13,
     13.5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "gp2y0a21",
    "sharp",
    "ir distance",
    "infrared",
    "distance",
    "distanza",
    "infrarossi"
   ],
   "sources": [
    {
     "title": "Sharp GP2Y0A21YK0F datasheet",
     "section": "Terminal 1 Vo, 2 GND, 3 Vcc; supply 4.5 to 5.5 V"
    }
   ]
  },
  {
   "id": "gp2y0a41sk",
   "name": "Sharp GP2Y0A41SK IR distance (4-30 cm)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "VO",
     "role": "analog_out",
     "notes": "Higher voltage when closer (about 3 V at 4 cm). To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     29.5,
     13,
     13.5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "gp2y0a41sk",
    "gp2y0a41sk0f",
    "sharp",
    "ir distance",
    "infrared",
    "distanza",
    "infrarossi"
   ],
   "sources": [
    {
     "title": "Sharp GP2Y0A41SK0F datasheet",
     "section": "Terminal 1 Vo, 2 GND, 3 Vcc; supply 4.5 to 5.5 V; range 4 to 30 cm"
    }
   ]
  },
  {
   "id": "sht31",
   "name": "SHT31 temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "AD",
     "role": "passive",
     "notes": "Address select: LOW = 0x44, HIGH = 0x45"
    },
    {
     "name": "AL",
     "role": "int",
     "notes": "Alert output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x44",
    "0x45"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     16.2,
     13,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "sht31",
    "sht30",
    "sht3x",
    "sensirion",
    "humidity",
    "temperature",
    "umidità",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Sensirion SHT3x-DIS datasheet",
     "section": "I2C address: 0x44 (ADDR low), 0x45 (ADDR high)"
    },
    {
     "title": "Sensirion SHT3x-DIS datasheet",
     "section": "Supply voltage 2.15 to 5.5 V"
    }
   ]
  },
  {
   "id": "sht40",
   "name": "SHT40 temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x44",
    "0x45"
   ],
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     13,
     13,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "sht40",
    "sht41",
    "sht4x",
    "sensirion",
    "humidity",
    "temperature",
    "umidità"
   ],
   "sources": [
    {
     "title": "Sensirion SHT4x datasheet",
     "section": "I2C address: 0x44 for SHT4x-AD1B, 0x45 for SHT4x-BD1B (fixed per product, not selectable)"
    },
    {
     "title": "Sensirion SHT4x datasheet",
     "section": "Supply voltage 1.08 to 3.6 V (breakouts with a regulator accept 5 V)"
    }
   ]
  },
  {
   "id": "shtc3",
   "name": "SHTC3 temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x70"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "shtc3",
    "sensirion",
    "humidity",
    "temperature",
    "umidità",
    "temperatura"
   ],
   "sources": [
    {
     "title": "Sensirion SHTC3 datasheet",
     "section": "I2C address 0x70 (fixed); chip supply 1.62 to 3.6 V"
    },
    {
     "title": "Sensirion SHTC3 datasheet",
     "section": "ID is read with the 16-bit command 0xEFC8, not a plain register, so it is not checked here"
    },
    {
     "title": "Adafruit SHTC3 guide",
     "section": "Pinout VIN, 3Vo, GND, SCL, SDA; regulator and level shifting on board"
    }
   ]
  },
  {
   "id": "si1145",
   "name": "SI1145 UV index / IR / visible light",
   "category": "sensor",
   "measures": [
    "uv",
    "light",
    "proximity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "LED",
     "role": "passive",
     "notes": "For an external IR LED (proximity). Leave unconnected"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x60"
   ],
   "idCheck": {
    "register": "0x00",
    "expect": "0x45"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20,
     18,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "si1145",
    "silicon labs",
    "uv index",
    "ir",
    "proximity",
    "ultravioletti",
    "luce"
   ],
   "sources": [
    {
     "title": "Silicon Labs Si1145/46/47 datasheet",
     "section": "Register 0x00 PART_ID (0x45 = Si1145, 0x46 = Si1146, 0x47 = Si1147); I2C address 0x60"
    },
    {
     "title": "Silicon Labs Si1145/46/47 datasheet",
     "section": "UV index is calculated from visible and IR light, it has no real UV photodiode"
    }
   ]
  },
  {
   "id": "si4703-fm",
   "name": "Si4703 FM radio receiver breakout",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "3.3V",
     "role": "power",
     "notes": "3.3 V only"
    },
    {
     "name": "SDIO",
     "role": "i2c_sda",
     "notes": "I2C data. Must be LOW when RST goes HIGH to choose I2C mode"
    },
    {
     "name": "SCLK",
     "role": "i2c_scl"
    },
    {
     "name": "SEN",
     "role": "passive",
     "notes": "Tie HIGH for I2C mode"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW. Needed to start I2C mode"
    },
    {
     "name": "GPIO1",
     "role": "passive",
     "notes": "Optional"
    },
    {
     "name": "GPIO2",
     "role": "int",
     "notes": "Seek/tune complete interrupt, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x10"
   ],
   "voltage": "3.3",
   "model": {
    "shape": "breakout",
    "size": [
     25,
     20,
     6
    ],
    "color": "#B22222"
   },
   "keywords": [
    "si4703",
    "fm radio",
    "fm",
    "rds",
    "radio fm",
    "ricevitore"
   ],
   "sources": [
    {
     "title": "Silicon Labs Si4702/03-C19 datasheet",
     "section": "Bus mode selection with RST, SEN and SDIO; 2-wire address 0010000 (0x10)"
    },
    {
     "title": "Silicon Labs AN230 Si4700/01/02/03 programming guide",
     "section": "2-wire reads start at register 0x0A"
    },
    {
     "title": "SparkFun Si4703 FM tuner breakout",
     "section": "Header order differs between boards: check the silkscreen"
    }
   ]
  },
  {
   "id": "si7021",
   "name": "Si7021 temperature + humidity",
   "category": "sensor",
   "measures": [
    "temperature",
    "humidity"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x40"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     13,
     15,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "si7021",
    "silicon labs",
    "gy-21",
    "humidity",
    "temperature",
    "umidità"
   ],
   "sources": [
    {
     "title": "Silicon Labs Si7021-A20 datasheet",
     "section": "I2C interface: address 0x40"
    }
   ]
  },
  {
   "id": "sim800l",
   "name": "SIM800L GSM/GPRS module (2G)",
   "category": "output",
   "pins": [
    {
     "name": "NET",
     "role": "passive",
     "notes": "Antenna connection"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.4 to 4.4 V with peaks up to 2 A. Use a Li-ion cell or a buck converter, not the ESP32 pins"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW"
    },
    {
     "name": "RXD",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "UART: the module receives here (2.8 V logic). Connect to an ESP32 TX pin through a divider"
    },
    {
     "name": "TXD",
     "role": "digital_out",
     "notes": "UART: the part sends data here. Connect to an ESP32 RX pin. Auto-baud: try 9600 or 115200"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Connect to ESP32 GND too"
    },
    {
     "name": "RING",
     "role": "digital_out",
     "notes": "LOW on an incoming call or SMS, optional"
    },
    {
     "name": "DTR",
     "role": "passive",
     "notes": "Sleep control, optional"
    },
    {
     "name": "MIC+",
     "role": "passive",
     "notes": "Microphone, optional"
    },
    {
     "name": "MIC-",
     "role": "passive"
    },
    {
     "name": "SPK+",
     "role": "passive",
     "notes": "Speaker, optional"
    },
    {
     "name": "SPK-",
     "role": "passive"
    }
   ],
   "bus": "gpio",
   "voltage": "3.4-4.4",
   "model": {
    "shape": "module",
    "size": [
     31.5,
     23,
     4
    ],
    "color": "#B22222"
   },
   "keywords": [
    "sim800l",
    "gsm",
    "gprs",
    "sms",
    "2g",
    "modem",
    "cellulare",
    "scheda sim"
   ],
   "sources": [
    {
     "title": "SIMCom SIM800 series hardware design",
     "section": "Power supply 3.4 to 4.4 V, burst current up to 2 A; UART at 2.8 V levels"
    }
   ]
  },
  {
   "id": "sk6812-rgbw-strip",
   "name": "SK6812 RGBW addressable LED strip",
   "category": "display",
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Use VIN for a few LEDs; a separate 5 V supply for more (up to about 80 mA per LED)"
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data in. Add a 330 Ω resistor; a 3.3 V to 5 V level shifter makes it reliable"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     60,
     12,
     2
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "sk6812",
    "rgbw",
    "neopixel",
    "led strip",
    "addressable",
    "white",
    "striscia led"
   ],
   "sources": [
    {
     "title": "Opsco SK6812RGBW datasheet",
     "section": "Single-wire data, 32 bits per LED (G R B W); supply 5 V"
    }
   ]
  },
  {
   "id": "slide-switch",
   "name": "Slide switch (SPDT)",
   "category": "input",
   "pins": [
    {
     "name": "A",
     "role": "digital_out",
     "notes": "To a GPIO; use INPUT_PULLUP. LOW when the slider is on this side"
    },
    {
     "name": "COM",
     "role": "ground",
     "notes": "Middle pin"
    },
    {
     "name": "B",
     "role": "passive",
     "notes": "Leave unconnected, or use a second GPIO"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "button",
    "size": [
     8.6,
     3.5,
     4
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "slide switch",
    "spdt",
    "switch",
    "on off",
    "interruttore",
    "deviatore"
   ],
   "sources": [
    {
     "title": "Arduino reference",
     "section": "pinMode INPUT_PULLUP"
    }
   ]
  },
  {
   "id": "sn65hvd230",
   "name": "SN65HVD230 CAN transceiver (3.3 V)",
   "category": "sensor",
   "pins": [
    {
     "name": "3V3",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CTX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Transmit data in. Connect to the ESP32 TWAI TX pin"
    },
    {
     "name": "CRX",
     "role": "digital_out",
     "notes": "Receive data out. Connect to the ESP32 TWAI RX pin"
    },
    {
     "name": "CANH",
     "role": "passive",
     "notes": "CAN high. To the bus, never to the ESP32"
    },
    {
     "name": "CANL",
     "role": "passive",
     "notes": "CAN low. To the bus, never to the ESP32"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     24,
     17,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "sn65hvd230",
    "vp230",
    "can bus",
    "can",
    "twai",
    "transceiver",
    "automotive"
   ],
   "sources": [
    {
     "title": "Texas Instruments SN65HVD230 datasheet",
     "section": "Supply 3 to 3.6 V; D (TX in), R (RX out), CANH, CANL"
    },
    {
     "title": "Espressif ESP32 Technical Reference Manual",
     "section": "TWAI controller needs an external transceiver"
    }
   ]
  },
  {
   "id": "solenoid-lock-12v",
   "name": "Solenoid door lock 12 V",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "passive",
     "notes": "12 V supply +. Switch it with a MOSFET or relay, never from an ESP32 pin"
    },
    {
     "name": "-",
     "role": "passive",
     "notes": "To the MOSFET drain. Add a flyback diode across the coil"
    }
   ],
   "bus": "gpio",
   "voltage": "12",
   "model": {
    "shape": "relay",
    "size": [
     54,
     41,
     28
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "solenoid",
    "door lock",
    "lock",
    "12v",
    "elettroserratura",
    "solenoide"
   ],
   "sources": [
    {
     "title": "Adafruit Lock-style Solenoid 12 VDC product page",
     "section": "12 V, about 650 mA; flyback diode required"
    }
   ]
  },
  {
   "id": "solenoid-valve-12v",
   "name": "Solenoid water valve 12 V (normally closed)",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "passive",
     "notes": "12 V supply +. Switch it with a MOSFET or relay, never from an ESP32 pin"
    },
    {
     "name": "-",
     "role": "passive",
     "notes": "To the MOSFET drain. Add a flyback diode across the coil"
    }
   ],
   "bus": "gpio",
   "voltage": "12",
   "model": {
    "shape": "relay",
    "size": [
     60,
     45,
     40
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "solenoid valve",
    "water valve",
    "irrigation",
    "12v",
    "elettrovalvola",
    "irrigazione"
   ],
   "sources": [
    {
     "title": "Adafruit Plastic Water Solenoid Valve 12V product page",
     "section": "Normally closed; needs about 3 psi pressure to seal"
    }
   ]
  },
  {
   "id": "ssr-g3mb",
   "name": "Solid state relay module (G3MB-202P)",
   "category": "output",
   "pins": [
    {
     "name": "DC+",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "DC-",
     "role": "ground"
    },
    {
     "name": "CH1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "LOW = on on most modules"
    },
    {
     "name": "SW1",
     "role": "passive",
     "notes": "Load terminals: AC only, 2 A max. Mains voltage is dangerous"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "relay",
    "size": [
     25,
     34,
     25
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "ssr",
    "solid state relay",
    "g3mb-202p",
    "omron",
    "relè statico",
    "relè"
   ],
   "sources": [
    {
     "title": "Omron G3MB datasheet",
     "section": "AC load only (zero cross), 2 A max, input 5 V"
    }
   ]
  },
  {
   "id": "ssr-40da",
   "name": "Solid state relay SSR-40DA (AC load)",
   "category": "output",
   "pins": [
    {
     "name": "3(+)",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Control + (3 to 32 V DC). Takes about 10 mA: HIGH = load on"
    },
    {
     "name": "4(-)",
     "role": "ground",
     "notes": "Control -"
    },
    {
     "name": "1",
     "role": "passive",
     "notes": "AC load terminal. Mains voltage is dangerous. Does not switch DC loads"
    },
    {
     "name": "2",
     "role": "passive",
     "notes": "AC load terminal"
    }
   ],
   "bus": "gpio",
   "voltage": "3-32",
   "model": {
    "shape": "relay",
    "size": [
     60,
     45,
     23
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ssr",
    "ssr-40da",
    "solid state relay",
    "fotek",
    "ac",
    "relè statico"
   ],
   "sources": [
    {
     "title": "Fotek SSR series datasheet",
     "section": "Input 3 to 32 VDC; output 24 to 380 VAC; zero-cross"
    }
   ]
  },
  {
   "id": "speaker-8ohm",
   "name": "Speaker 8 Ω 0.5 W",
   "category": "output",
   "pins": [
    {
     "name": "+",
     "role": "passive",
     "notes": "Never to an ESP32 pin: use an amplifier (PAM8403, MAX98357A)"
    },
    {
     "name": "-",
     "role": "passive",
     "notes": "To the amplifier output, not to GND on bridged amplifiers"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "motor",
    "size": [
     40,
     40,
     12
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "speaker",
    "8 ohm",
    "loudspeaker",
    "audio",
    "altoparlante",
    "cassa"
   ],
   "sources": [
    {
     "title": "Espressif ESP32 datasheet",
     "section": "GPIO drive strength is far too low for an 8 Ω load"
    }
   ]
  },
  {
   "id": "ssd1306-128x32",
   "name": "SSD1306 OLED 0.91\" 128x32 (I2C)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x3C"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "oled",
    "size": [
     38,
     12,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "oled",
    "ssd1306",
    "0.91",
    "128x32",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Solomon Systech SSD1306 datasheet",
     "section": "I2C-bus interface: slave address 0111 10 SA0 (0x3C with SA0 = 0)"
    }
   ]
  },
  {
   "id": "ssd1306-spi",
   "name": "SSD1306 OLED 0.96\" 128x64 (SPI, 7 pins)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "D0",
     "role": "spi_sck",
     "notes": "SPI clock (SCK)"
    },
    {
     "name": "D1",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI)"
    },
    {
     "name": "RES",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "CS",
     "role": "spi_cs",
     "notes": "SPI chip select"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "oled",
    "size": [
     27,
     27,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "oled",
    "ssd1306",
    "spi",
    "0.96",
    "128x64",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Solomon Systech SSD1306 datasheet",
     "section": "4-wire SPI interface: D0 = SCLK, D1 = SDIN, D/C#, CS#, RES#"
    }
   ]
  },
  {
   "id": "ssd1306-i2c",
   "name": "SSD1306 OLED 128x64 (I2C)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x3C",
    "0x3D"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "oled",
    "size": [
     27,
     27,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "oled",
    "ssd1306",
    "display",
    "screen",
    "128x64"
   ],
   "sources": [
    {
     "title": "Solomon Systech SSD1306 datasheet",
     "section": "8.1.5 I2C-bus interface (slave address 0111 10 SA0)"
    }
   ],
   "starterSketch": "ssd1306"
  },
  {
   "id": "ssd1309-oled-242",
   "name": "SSD1309 2.42\" OLED 128x64 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin order varies between boards: match by the printed label."
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V or 5 V (on-board regulator on most boards)"
    },
    {
     "name": "SCK",
     "role": "spi_sck",
     "notes": "SPI clock. Some boards print SCL: still SPI, not I2C"
    },
    {
     "name": "SDA",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI), not I2C"
    },
    {
     "name": "RES",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset. Needed: the SSD1309 will not start without a reset pulse"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "oled",
    "size": [
     70,
     41,
     5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ssd1309",
    "oled",
    "2.42",
    "128x64",
    "display",
    "schermo",
    "big oled"
   ],
   "sources": [
    {
     "title": "Solomon Systech SSD1309 datasheet",
     "section": "4-wire serial interface: CS#, D/C#, SCLK (D0), SDIN (D1); RES# low pulse at power-up"
    }
   ]
  },
  {
   "id": "ssd1327-oled-15",
   "name": "SSD1327 1.5\" grayscale OLED 128x128 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Pin order varies between boards: match by the printed label. 3.3 V or 5 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI). In I2C mode (resistors moved on the back) this is SDA"
    },
    {
     "name": "CLK",
     "role": "spi_sck",
     "notes": "SPI clock. In I2C mode this is SCL"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "oled",
    "size": [
     44.5,
     37,
     5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ssd1327",
    "oled",
    "grayscale",
    "16 gray",
    "1.5",
    "128x128",
    "display",
    "scala di grigi"
   ],
   "sources": [
    {
     "title": "Solomon Systech SSD1327 datasheet",
     "section": "4-wire SPI and I2C interfaces; 16 gray levels"
    },
    {
     "title": "Waveshare 1.5inch OLED Module wiki",
     "section": "Pins VCC, GND, DIN, CLK, CS, DC, RST; SPI by default"
    }
   ]
  },
  {
   "id": "ssd1351-oled-15",
   "name": "SSD1351 1.5\" RGB OLED 128x128 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Pin order varies between boards: match by the printed label. 3.3 V or 5 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI)"
    },
    {
     "name": "CLK",
     "role": "spi_sck",
     "notes": "SPI clock"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "oled",
    "size": [
     44.5,
     37,
     5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ssd1351",
    "oled",
    "rgb oled",
    "1.5",
    "128x128",
    "color display",
    "schermo a colori"
   ],
   "sources": [
    {
     "title": "Solomon Systech SSD1351 datasheet",
     "section": "4-wire SPI interface"
    },
    {
     "title": "Waveshare 1.5inch RGB OLED Module wiki",
     "section": "Pins VCC, GND, DIN, CLK, CS, DC, RST"
    }
   ]
  },
  {
   "id": "st7735-tft-096",
   "name": "ST7735 0.96\" IPS TFT 80x160 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V"
    },
    {
     "name": "SCL",
     "role": "spi_sck",
     "notes": "SPI clock, not I2C"
    },
    {
     "name": "SDA",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI), not I2C"
    },
    {
     "name": "RES",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "BLK",
     "role": "passive",
     "notes": "Backlight. Leave unconnected (on) or drive LOW to switch off"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "oled",
    "size": [
     30,
     24,
     4
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "st7735",
    "st7735s",
    "tft",
    "ips",
    "0.96",
    "80x160",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Sitronix ST7735S datasheet",
     "section": "4-line serial interface: CSX, D/CX, SCL, SDA"
    }
   ]
  },
  {
   "id": "st7735-tft-18",
   "name": "ST7735 1.8\" TFT 128x160 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "RESET",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "A0",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select (DC)"
    },
    {
     "name": "SDA",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI), not I2C"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "LED",
     "role": "passive",
     "notes": "Backlight: to 3V3"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "oled",
    "size": [
     34,
     56,
     4
    ],
    "color": "#B22222"
   },
   "keywords": [
    "st7735",
    "tft",
    "1.8",
    "128x160",
    "color display",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Sitronix ST7735S datasheet",
     "section": "4-line serial interface: CSX, D/CX, SCL, SDA"
    }
   ]
  },
  {
   "id": "st7789-240",
   "name": "ST7789 1.3\" IPS 240x240 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V"
    },
    {
     "name": "SCL",
     "role": "spi_sck",
     "notes": "SPI clock, not I2C"
    },
    {
     "name": "SDA",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI), not I2C"
    },
    {
     "name": "RES",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "BLK",
     "role": "passive",
     "notes": "Backlight. Leave unconnected (on) or drive LOW to switch off"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "oled",
    "size": [
     28,
     39,
     4
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "st7789",
    "ips",
    "tft",
    "240x240",
    "1.3",
    "color display",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Sitronix ST7789 datasheet",
     "section": "Serial interface; this module ties CS LOW (SPI mode 3)"
    }
   ]
  },
  {
   "id": "st7789-tft-169",
   "name": "ST7789 1.69\" IPS TFT 240x280 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin order varies between boards: match by the printed label."
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V"
    },
    {
     "name": "SCL",
     "role": "spi_sck",
     "notes": "SPI clock, not I2C"
    },
    {
     "name": "SDA",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI), not I2C"
    },
    {
     "name": "RES",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "BLK",
     "role": "passive",
     "notes": "Backlight. Leave unconnected (on) or drive LOW to switch off"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "oled",
    "size": [
     31,
     40,
     4
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "st7789",
    "ips",
    "tft",
    "1.69",
    "240x280",
    "rounded corners",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Sitronix ST7789V2 datasheet",
     "section": "4-line serial interface"
    }
   ]
  },
  {
   "id": "st7789-tft-20",
   "name": "ST7789 2.0\" IPS TFT 240x320 (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.3 V (some boards have a regulator and accept 5 V)"
    },
    {
     "name": "SCL",
     "role": "spi_sck",
     "notes": "SPI clock, not I2C"
    },
    {
     "name": "SDA",
     "role": "spi_mosi",
     "notes": "SPI data (MOSI), not I2C"
    },
    {
     "name": "RES",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "DC",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "BL",
     "role": "passive",
     "notes": "Backlight. To 3V3, or to a PWM pin through a transistor for dimming"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "oled",
    "size": [
     36,
     53,
     4
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "st7789",
    "ips",
    "tft",
    "2.0",
    "240x320",
    "color display",
    "display",
    "schermo"
   ],
   "sources": [
    {
     "title": "Sitronix ST7789V datasheet",
     "section": "4-line serial interface"
    }
   ]
  },
  {
   "id": "st7796-tft-35",
   "name": "ST7796S 3.5\" TFT 320x480 with touch (SPI)",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "On-board 3.3 V regulator: 3V3 or 5 V both work on most boards"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CS",
     "role": "spi_cs"
    },
    {
     "name": "RESET",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset"
    },
    {
     "name": "DC/RS",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data / command select"
    },
    {
     "name": "SDI(MOSI)",
     "role": "spi_mosi"
    },
    {
     "name": "SCK",
     "role": "spi_sck"
    },
    {
     "name": "LED",
     "role": "passive",
     "notes": "Backlight: to 3V3 (always on) or through a transistor for dimming"
    },
    {
     "name": "SDO(MISO)",
     "role": "spi_miso",
     "notes": "Optional: only needed to read from the display"
    },
    {
     "name": "T_CLK",
     "role": "spi_sck",
     "notes": "Touch controller clock (XPT2046), shares the SPI bus"
    },
    {
     "name": "T_CS",
     "role": "spi_cs",
     "notes": "Touch controller chip select"
    },
    {
     "name": "T_DIN",
     "role": "spi_mosi",
     "notes": "Touch controller data in"
    },
    {
     "name": "T_DO",
     "role": "spi_miso",
     "notes": "Touch controller data out"
    },
    {
     "name": "T_IRQ",
     "role": "int",
     "notes": "LOW while the screen is touched"
    }
   ],
   "bus": "spi",
   "voltage": "3.3-5",
   "model": {
    "shape": "oled",
    "size": [
     56,
     80,
     6
    ],
    "color": "#B22222"
   },
   "keywords": [
    "st7796",
    "st7796s",
    "tft",
    "3.5",
    "320x480",
    "touch",
    "xpt2046",
    "display"
   ],
   "sources": [
    {
     "title": "Sitronix ST7796S datasheet",
     "section": "4-line serial interface"
    },
    {
     "title": "LCDwiki 3.5inch SPI Module ST7796 (MSP3520) user manual",
     "section": "Pin description"
    },
    {
     "title": "XPT2046 touch controller datasheet",
     "section": "SPI interface and PENIRQ"
    }
   ]
  },
  {
   "id": "sw-420",
   "name": "SW-420 vibration sensor module",
   "category": "sensor",
   "measures": [
    "vibration"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Changes level when the module shakes. Sensitivity set with the trimmer"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     32,
     14,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "sw-420",
    "vibration",
    "shock",
    "vibrazione",
    "urto"
   ],
   "sources": [
    {
     "title": "Texas Instruments LM393 datasheet",
     "section": "Comparator output driven by the vibration switch"
    }
   ]
  },
  {
   "id": "tactile-button-12mm",
   "name": "Tactile button 12 mm with cap",
   "category": "input",
   "pins": [
    {
     "name": "1A",
     "role": "digital_out",
     "notes": "Legs 1A and 1B are always joined. To a GPIO with INPUT_PULLUP"
    },
    {
     "name": "1B",
     "role": "passive",
     "notes": "Joined to 1A"
    },
    {
     "name": "2A",
     "role": "ground",
     "notes": "Legs 2A and 2B are always joined"
    },
    {
     "name": "2B",
     "role": "passive",
     "notes": "Joined to 2A"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "button",
    "size": [
     12,
     12,
     11
    ],
    "color": "#2B2B2B"
   },
   "keywords": [
    "tactile switch",
    "12mm",
    "push button",
    "button cap",
    "tact switch",
    "pulsante"
   ],
   "sources": [
    {
     "title": "Omron B3F tactile switch datasheet",
     "section": "B3F-4000 (12 x 12 mm): terminals 1-2 and 3-4 joined inside"
    }
   ]
  },
  {
   "id": "tb6612fng-driver",
   "name": "TB6612FNG dual motor driver",
   "category": "output",
   "pins": [
    {
     "name": "VM",
     "role": "passive",
     "notes": "Motor supply up to 13.5 V from a separate supply"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Logic supply: 3V3"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "AO1",
     "role": "passive",
     "notes": "Motor A"
    },
    {
     "name": "AO2",
     "role": "passive",
     "notes": "Motor A"
    },
    {
     "name": "BO2",
     "role": "passive",
     "notes": "Motor B"
    },
    {
     "name": "BO1",
     "role": "passive",
     "notes": "Motor B"
    },
    {
     "name": "GND2",
     "role": "ground"
    },
    {
     "name": "PWMA",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor A speed (PWM)"
    },
    {
     "name": "AIN2",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "AIN1",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "STBY",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Must be HIGH to run"
    },
    {
     "name": "BIN1",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "BIN2",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "PWMB",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Motor B speed (PWM)"
    },
    {
     "name": "GND3",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     41.6,
     20.3,
     3
    ],
    "color": "#B22222"
   },
   "keywords": [
    "tb6612fng",
    "tb6612",
    "motor driver",
    "h-bridge",
    "driver motore"
   ],
   "sources": [
    {
     "title": "Toshiba TB6612FNG datasheet",
     "section": "VCC 2.7 to 5.5 V, VM up to 13.5 V, 1.2 A per channel"
    },
    {
     "title": "Pololu / SparkFun TB6612FNG carrier",
     "section": "Pinout"
    }
   ]
  },
  {
   "id": "tca9548a-mux",
   "name": "TCA9548A I2C multiplexer (8 channels)",
   "category": "output",
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "3 to 5 V"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "RST",
     "role": "passive",
     "notes": "Reset, active LOW, pulled up. Leave unconnected"
    },
    {
     "name": "A0",
     "role": "passive",
     "notes": "Address select. All unconnected = 0x70"
    },
    {
     "name": "A1",
     "role": "passive"
    },
    {
     "name": "A2",
     "role": "passive"
    },
    {
     "name": "SD0",
     "role": "passive",
     "notes": "Channel SDA: to a sensor, not to the ESP32"
    },
    {
     "name": "SC0",
     "role": "passive",
     "notes": "Channel SCL: to a sensor, not to the ESP32"
    },
    {
     "name": "SD1",
     "role": "passive"
    },
    {
     "name": "SC1",
     "role": "passive"
    },
    {
     "name": "SD2",
     "role": "passive"
    },
    {
     "name": "SC2",
     "role": "passive"
    },
    {
     "name": "SD3",
     "role": "passive"
    },
    {
     "name": "SC3",
     "role": "passive"
    },
    {
     "name": "SD4",
     "role": "passive"
    },
    {
     "name": "SC4",
     "role": "passive"
    },
    {
     "name": "SD5",
     "role": "passive"
    },
    {
     "name": "SC5",
     "role": "passive"
    },
    {
     "name": "SD6",
     "role": "passive"
    },
    {
     "name": "SC6",
     "role": "passive"
    },
    {
     "name": "SD7",
     "role": "passive"
    },
    {
     "name": "SC7",
     "role": "passive"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x70",
    "0x71",
    "0x72",
    "0x73",
    "0x74",
    "0x75",
    "0x76",
    "0x77"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     62,
     21,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tca9548a",
    "pca9548a",
    "i2c multiplexer",
    "i2c mux",
    "same address",
    "multiplexer",
    "multiplatore i2c"
   ],
   "sources": [
    {
     "title": "Texas Instruments TCA9548A datasheet",
     "section": "Slave address 1110 A2 A1 A0 (0x70 to 0x77); control register selects channels"
    },
    {
     "title": "Adafruit TCA9548A 1-to-8 I2C multiplexer breakout guide",
     "section": "Pinouts; channel pull-ups must be on the sensor boards"
    }
   ]
  },
  {
   "id": "tcrt5000-line",
   "name": "TCRT5000 line tracker module",
   "category": "input",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DO",
     "role": "digital_out",
     "notes": "Changes level over a black line (threshold set with the trimmer)"
    },
    {
     "name": "AO",
     "role": "analog_out",
     "notes": "Reflection strength. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     32,
     14,
     7
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tcrt5000",
    "line tracker",
    "line follower",
    "reflective",
    "segui linea",
    "infrarossi"
   ],
   "sources": [
    {
     "title": "Vishay TCRT5000 datasheet",
     "section": "Reflective optical sensor"
    },
    {
     "title": "Texas Instruments LM393 datasheet",
     "section": "Comparator output"
    }
   ]
  },
  {
   "id": "tcs3200-gy31",
   "name": "TCS3200 colour sensor (GY-31)",
   "category": "sensor",
   "measures": [
    "color"
   ],
   "pins": [
    {
     "name": "S0",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Output frequency scaling bit 0"
    },
    {
     "name": "S1",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Output frequency scaling bit 1 (S0 HIGH, S1 LOW = 20 %)"
    },
    {
     "name": "S2",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Colour filter select bit 0"
    },
    {
     "name": "S3",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Colour filter select bit 1"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "Square wave: its frequency follows the light level. Level = VCC: power from 3V3"
    },
    {
     "name": "OE",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Output enable, active LOW. Can be tied to GND"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3 so OUT stays at 3.3 V"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     33,
     33,
     12
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "tcs3200",
    "tcs230",
    "gy-31",
    "color",
    "colour sensor",
    "colore",
    "sensore colore"
   ],
   "sources": [
    {
     "title": "TAOS TCS3200 datasheet",
     "section": "S0/S1 frequency scaling, S2/S3 photodiode type, OE active LOW; supply 2.7 to 5.5 V"
    },
    {
     "title": "TAOS TCS3200 datasheet",
     "section": "Output is a frequency, not I2C; header order varies between boards"
    }
   ]
  },
  {
   "id": "tcs34725",
   "name": "TCS34725 colour sensor",
   "category": "sensor",
   "measures": [
    "color",
    "light"
   ],
   "pins": [
    {
     "name": "LED",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pull LOW to switch the white LED off; leave open for on"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "3V3",
     "role": "passive",
     "notes": "Output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VIN",
     "role": "power"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x29"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20,
     20,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tcs34725",
    "rgb",
    "color",
    "colour sensor",
    "colore",
    "sensore colore"
   ],
   "sources": [
    {
     "title": "ams TCS3472 datasheet",
     "section": "I2C address 0x29"
    },
    {
     "title": "ams TCS3472 datasheet",
     "section": "ID register 0x12 (needs the command bit, so not read here)"
    }
   ]
  },
  {
   "id": "tds-meter",
   "name": "TDS water quality sensor",
   "category": "sensor",
   "measures": [
    "tds"
   ],
   "pins": [
    {
     "name": "A",
     "role": "analog_out",
     "notes": "0 to 2.3 V, safe for the ESP32. To an ADC1 pin (GPIO 32 to 39)"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked + on the board"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked - on the board"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     42,
     32,
     8
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "tds",
    "ppm",
    "water quality",
    "conductivity",
    "sen0244",
    "qualità acqua",
    "conducibilità"
   ],
   "sources": [
    {
     "title": "DFRobot SEN0244 Gravity TDS meter wiki",
     "section": "Supply 3.3 to 5.5 V, output 0 to 2.3 V; needs water temperature for compensation"
    },
    {
     "title": "DFRobot SEN0244 Gravity TDS meter wiki",
     "section": "Do not use it in the same container as a pH probe: they interfere"
    }
   ]
  },
  {
   "id": "tea5767-fm",
   "name": "TEA5767 FM radio module",
   "category": "output",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x60"
   ],
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     30,
     30,
     12
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tea5767",
    "fm radio",
    "fm",
    "radio fm",
    "ricevitore",
    "philips"
   ],
   "sources": [
    {
     "title": "NXP TEA5767HN datasheet",
     "section": "I2C address 1100000 (0x60); 5 data bytes written and read in one block; supply 2.5 to 5 V"
    },
    {
     "title": "Common TEA5767 module",
     "section": "Header VCC, SDA, SCL, GND. Order varies between boards: check the silkscreen"
    }
   ]
  },
  {
   "id": "tilt-switch",
   "name": "Tilt switch (SW-520D)",
   "category": "input",
   "pins": [
    {
     "name": "1",
     "role": "digital_out",
     "notes": "To a GPIO; use INPUT_PULLUP. Closed when upright"
    },
    {
     "name": "2",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "button",
    "size": [
     6.1,
     6,
     12
    ],
    "color": "#C9CED4"
   },
   "keywords": [
    "tilt switch",
    "sw-520d",
    "ball switch",
    "tilt",
    "inclinazione"
   ],
   "sources": [
    {
     "title": "Arduino reference",
     "section": "pinMode INPUT_PULLUP"
    }
   ]
  },
  {
   "id": "tja1050",
   "name": "TJA1050 CAN transceiver module (5 V)",
   "category": "sensor",
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "CTX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Transmit data in. Connect to the ESP32 TWAI TX pin"
    },
    {
     "name": "CRX",
     "role": "digital_out",
     "notes": "Receive data out, 5 V: use a divider before the ESP32 TWAI RX pin"
    },
    {
     "name": "CANH",
     "role": "passive",
     "notes": "CAN high. To the bus, never to the ESP32"
    },
    {
     "name": "CANL",
     "role": "passive",
     "notes": "CAN low. To the bus, never to the ESP32"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     22,
     12,
     8
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tja1050",
    "can bus",
    "can",
    "twai",
    "transceiver",
    "automotive"
   ],
   "sources": [
    {
     "title": "NXP TJA1050 datasheet",
     "section": "Supply 4.75 to 5.25 V; TXD in, RXD out, CANH, CANL"
    }
   ]
  },
  {
   "id": "tlv493d",
   "name": "TLV493D 3D magnetic sensor",
   "category": "sensor",
   "measures": [
    "magnetic field",
    "position"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "Output of the on-board 3.3 V regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x5E",
    "0x1F"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "tlv493d",
    "infineon",
    "3d hall",
    "magnetic",
    "joystick",
    "hall",
    "campo magnetico"
   ],
   "sources": [
    {
     "title": "Infineon TLV493D-A1B6 user manual",
     "section": "I2C address 0x5E or 0x1F, chosen by the SDA level at power-up"
    },
    {
     "title": "Infineon TLV493D-A1B6 datasheet",
     "section": "Supply 2.8 to 3.5 V (breakouts add a regulator)"
    }
   ]
  },
  {
   "id": "tm1637-4digit",
   "name": "TM1637 4-digit 7-segment display",
   "category": "display",
   "pins": [
    {
     "name": "CLK",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Clock (not I2C, not SPI)"
    },
    {
     "name": "DIO",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data (not I2C)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "5V",
     "role": "power",
     "notes": "Works at 3.3 V or 5 V"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     42,
     24,
     12
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tm1637",
    "7 segment",
    "4 digit",
    "clock display",
    "display 7 segmenti",
    "orologio"
   ],
   "sources": [
    {
     "title": "Titan Micro TM1637 datasheet",
     "section": "Two-wire interface CLK / DIO (not I2C compatible)"
    }
   ]
  },
  {
   "id": "tm1637-6digit",
   "name": "TM1637 6-digit 7-segment display",
   "category": "display",
   "pins": [
    {
     "name": "CLK",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin order varies between boards: match by the printed label. Clock (not I2C, not SPI)"
    },
    {
     "name": "DIO",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data (not I2C). Digits may be wired out of order: libraries have a setting for it"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Works at 3.3 V or 5 V"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     80,
     20,
     12
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tm1637",
    "7 segment",
    "6 digit",
    "display",
    "display 7 segmenti",
    "contatore"
   ],
   "sources": [
    {
     "title": "Titan Micro TM1637 datasheet",
     "section": "Two-wire interface CLK / DIO (not I2C compatible); up to 6 digits"
    }
   ]
  },
  {
   "id": "tm1638-ledkey",
   "name": "TM1638 LED & KEY board",
   "category": "display",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "STB",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Strobe"
    },
    {
     "name": "CLK",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Clock"
    },
    {
     "name": "DIO",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     76,
     50,
     10
    ],
    "color": "#B22222"
   },
   "keywords": [
    "tm1638",
    "led&key",
    "7 segment",
    "buttons",
    "leds",
    "display",
    "pulsanti"
   ],
   "sources": [
    {
     "title": "Titan Micro TM1638 datasheet",
     "section": "Serial interface STB, CLK, DIO"
    }
   ]
  },
  {
   "id": "tmc2208-driver",
   "name": "TMC2208 silent stepper driver (StepStick)",
   "category": "output",
   "pins": [
    {
     "name": "EN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin order varies between boards: match by the printed label. Enable, active LOW. Connect to GND to keep it on"
    },
    {
     "name": "MS1",
     "role": "passive",
     "notes": "Microstep select"
    },
    {
     "name": "MS2",
     "role": "passive",
     "notes": "Microstep select"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Not connected (some versions: UART)"
    },
    {
     "name": "PDN_UART",
     "role": "passive",
     "notes": "UART config (optional). Leave unconnected for STEP/DIR use"
    },
    {
     "name": "CLK",
     "role": "passive",
     "notes": "Clock input. Connect to GND (internal clock)"
    },
    {
     "name": "STEP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "One pulse = one (micro)step"
    },
    {
     "name": "DIR",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Direction"
    },
    {
     "name": "VM",
     "role": "passive",
     "notes": "Motor supply 5.5 to 36 V from a separate supply. Add a 100 µF capacitor"
    },
    {
     "name": "GND_MOT",
     "role": "ground",
     "notes": "Motor supply ground"
    },
    {
     "name": "B2",
     "role": "passive",
     "notes": "Motor coil B"
    },
    {
     "name": "B1",
     "role": "passive",
     "notes": "Motor coil B"
    },
    {
     "name": "A1",
     "role": "passive",
     "notes": "Motor coil A"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Motor coil A"
    },
    {
     "name": "VIO",
     "role": "power",
     "notes": "Logic supply: 3V3"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     41.6,
     15.2,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "tmc2208",
    "stepper driver",
    "stepstick",
    "silent",
    "nema17",
    "driver passo passo"
   ],
   "sources": [
    {
     "title": "Trinamic TMC2208 datasheet",
     "section": "VM 4.75 to 36 V; VIO 3 to 5 V; STEP/DIR and single-wire UART (PDN_UART)"
    }
   ]
  },
  {
   "id": "tmc2209-driver",
   "name": "TMC2209 silent stepper driver (StepStick)",
   "category": "output",
   "pins": [
    {
     "name": "EN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pin order varies between boards: match by the printed label. Enable, active LOW. Connect to GND to keep it on"
    },
    {
     "name": "MS1",
     "role": "passive",
     "notes": "Microstep select. With UART: address bit 0"
    },
    {
     "name": "MS2",
     "role": "passive",
     "notes": "Microstep select. With UART: address bit 1"
    },
    {
     "name": "UART",
     "role": "passive",
     "notes": "Single-wire UART (optional, via a 1 kΩ resistor for TX)"
    },
    {
     "name": "PDN",
     "role": "passive",
     "notes": "Power down / UART. Leave unconnected for STEP/DIR use"
    },
    {
     "name": "CLK",
     "role": "passive",
     "notes": "Clock input. Connect to GND (internal clock)"
    },
    {
     "name": "STEP",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "One pulse = one (micro)step"
    },
    {
     "name": "DIR",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Direction"
    },
    {
     "name": "VM",
     "role": "passive",
     "notes": "Motor supply 5.5 to 28 V from a separate supply. Add a 100 µF capacitor"
    },
    {
     "name": "GND_MOT",
     "role": "ground",
     "notes": "Motor supply ground"
    },
    {
     "name": "B2",
     "role": "passive",
     "notes": "Motor coil B"
    },
    {
     "name": "B1",
     "role": "passive",
     "notes": "Motor coil B"
    },
    {
     "name": "A1",
     "role": "passive",
     "notes": "Motor coil A"
    },
    {
     "name": "A2",
     "role": "passive",
     "notes": "Motor coil A"
    },
    {
     "name": "VIO",
     "role": "power",
     "notes": "Logic supply: 3V3"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIAG",
     "role": "digital_out",
     "notes": "Stall / error output (StallGuard). Optional"
    },
    {
     "name": "INDEX",
     "role": "digital_out",
     "notes": "Index pulse output. Optional"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     46.7,
     15.2,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "tmc2209",
    "stepper driver",
    "stepstick",
    "silent",
    "stallguard",
    "driver passo passo"
   ],
   "sources": [
    {
     "title": "Trinamic TMC2209 datasheet",
     "section": "VM 4.75 to 29 V; VIO 3 to 5 V; UART address set by MS1/MS2; DIAG, INDEX"
    }
   ]
  },
  {
   "id": "tmp102",
   "name": "TMP102 temperature",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Chip maximum is 3.6 V: use 3V3 only"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "ALT",
     "role": "int",
     "notes": "Alert output, optional"
    },
    {
     "name": "ADD0",
     "role": "passive",
     "notes": "Address: GND = 0x48, VCC = 0x49, SDA = 0x4A, SCL = 0x4B. Pin order differs between boards"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x48",
    "0x49",
    "0x4A",
    "0x4B"
   ],
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     16.3,
     13,
     1.6
    ],
    "color": "#B22222"
   },
   "keywords": [
    "tmp102",
    "texas instruments",
    "temperature",
    "temperatura",
    "sparkfun"
   ],
   "sources": [
    {
     "title": "TI TMP102 datasheet",
     "section": "Address pin table: ADD0 to GND, V+, SDA or SCL gives 0x48 to 0x4B"
    },
    {
     "title": "TI TMP102 datasheet",
     "section": "Supply 1.4 to 3.6 V; no ID register"
    }
   ]
  },
  {
   "id": "tmp117",
   "name": "TMP117 high-accuracy temperature",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "ALERT output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x48",
    "0x49",
    "0x4A",
    "0x4B"
   ],
   "idCheck": {
    "register": "0x0F",
    "expect": "0x01"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tmp117",
    "texas instruments",
    "precision",
    "temperature",
    "temperatura"
   ],
   "sources": [
    {
     "title": "TI TMP117 datasheet",
     "section": "Device ID register 0x0F = 0x0117 (first byte read is 0x01)"
    },
    {
     "title": "TI TMP117 datasheet",
     "section": "ADD0 pin selects 0x48 to 0x4B; chip supply 1.7 to 5.5 V"
    },
    {
     "title": "Adafruit TMP117 guide",
     "section": "Pinout VIN, 3Vo, GND, SCL, SDA, INT"
    }
   ]
  },
  {
   "id": "tmp36",
   "name": "TMP36 analog temperature sensor",
   "category": "sensor",
   "measures": [
    "temperature"
   ],
   "pins": [
    {
     "name": "+VS",
     "role": "power",
     "notes": "Left leg, flat side facing you"
    },
    {
     "name": "VOUT",
     "role": "analog_out",
     "notes": "Middle leg. 750 mV at 25 °C, 10 mV per °C. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Right leg"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     8.6,
     4,
     5
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "tmp36",
    "analog",
    "temperature",
    "to-92",
    "temperatura",
    "sensore temperatura"
   ],
   "sources": [
    {
     "title": "Analog Devices TMP35/TMP36/TMP37 datasheet",
     "section": "Pin configuration and output scale (10 mV/°C, 750 mV at 25 °C)"
    },
    {
     "title": "Analog Devices TMP36 datasheet",
     "section": "Supply 2.7 to 5.5 V"
    }
   ]
  },
  {
   "id": "tp4056-charger",
   "name": "TP4056 Li-ion charger with protection",
   "category": "output",
   "pins": [
    {
     "name": "IN+",
     "role": "passive",
     "notes": "5 V input (or the USB connector)"
    },
    {
     "name": "IN-",
     "role": "ground",
     "notes": "Input ground"
    },
    {
     "name": "B+",
     "role": "passive",
     "notes": "To the cell +. One 3.7 V Li-ion / LiPo cell only"
    },
    {
     "name": "B-",
     "role": "passive",
     "notes": "To the cell -. Not the same as GND: protection sits in between"
    },
    {
     "name": "OUT+",
     "role": "passive",
     "notes": "3.0 to 4.2 V to the load. Too low for VIN: use an LDO or a boost to 5 V"
    },
    {
     "name": "OUT-",
     "role": "ground",
     "notes": "Load ground: to the ESP32 GND"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     26,
     17,
     5
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tp4056",
    "charger",
    "lipo",
    "li-ion",
    "18650",
    "battery",
    "caricabatteria",
    "batteria"
   ],
   "sources": [
    {
     "title": "NanJing Top Power TP4056 datasheet",
     "section": "Charge to 4.2 V; current set by RPROG (1.2 kΩ = 1 A)"
    },
    {
     "title": "Fortune DW01A datasheet",
     "section": "Over-discharge, over-charge and over-current protection"
    }
   ]
  },
  {
   "id": "tsl2561",
   "name": "TSL2561 light sensor",
   "category": "sensor",
   "measures": [
    "light"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "ADDR",
     "role": "passive",
     "notes": "Address select: GND = 0x29, open = 0x39, VCC = 0x49"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x29",
    "0x39",
    "0x49"
   ],
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     16.2,
     13,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "tsl2561",
    "lux",
    "light",
    "luminosity",
    "luce",
    "luminosità"
   ],
   "sources": [
    {
     "title": "TAOS/ams TSL2560/TSL2561 datasheet",
     "section": "Slave address select: ADDR SEL at GND 0x29, float 0x39, VDD 0x49"
    },
    {
     "title": "TAOS/ams TSL2561 datasheet",
     "section": "Supply 2.7 to 3.6 V"
    }
   ]
  },
  {
   "id": "tsl2591",
   "name": "TSL2591 high dynamic range light",
   "category": "sensor",
   "measures": [
    "light"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "INT",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x29"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     19,
     16,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "tsl2591",
    "ams",
    "lux",
    "light",
    "luce",
    "luminosità"
   ],
   "sources": [
    {
     "title": "ams TSL2591 datasheet",
     "section": "I2C address 0x29; 600M:1 dynamic range"
    },
    {
     "title": "ams TSL2591 datasheet",
     "section": "ID register 0x12 reads 0x50 but needs the command bit, so it is not read here"
    }
   ]
  },
  {
   "id": "ttp223-touch",
   "name": "TTP223 capacitive touch button",
   "category": "input",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "SIG",
     "role": "digital_out",
     "notes": "HIGH while touched (default mode)"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "button",
    "size": [
     15,
     11,
     2
    ],
    "color": "#B22222"
   },
   "keywords": [
    "ttp223",
    "touch",
    "capacitive",
    "touch button",
    "tocco",
    "pulsante touch"
   ],
   "sources": [
    {
     "title": "Tontek TTP223 datasheet",
     "section": "Supply 2.0 to 5.5 V; direct output mode active HIGH by default"
    }
   ]
  },
  {
   "id": "ttp229-touch16",
   "name": "TTP229 16-key capacitive touch keypad",
   "category": "input",
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Clock from the ESP32. Not I2C: a simple 2-wire serial"
    },
    {
     "name": "SDO",
     "role": "digital_out",
     "notes": "Key data out to an ESP32 input"
    },
    {
     "name": "OUT1",
     "role": "passive",
     "notes": "Direct output for key 1 in 8-key mode, not needed with SCL/SDO"
    },
    {
     "name": "OUT2",
     "role": "passive"
    },
    {
     "name": "OUT3",
     "role": "passive"
    },
    {
     "name": "OUT4",
     "role": "passive"
    },
    {
     "name": "OUT5",
     "role": "passive"
    },
    {
     "name": "OUT6",
     "role": "passive"
    },
    {
     "name": "OUT7",
     "role": "passive"
    },
    {
     "name": "OUT8",
     "role": "passive"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     65,
     50,
     3
    ],
    "color": "#B22222"
   },
   "keywords": [
    "ttp229",
    "touch keypad",
    "16 keys",
    "capacitive",
    "touch",
    "tastierino touch"
   ],
   "sources": [
    {
     "title": "Tontek TTP229-BSF datasheet",
     "section": "2-wire serial output (SCL, SDO); 8 or 16 keys by option pin (TP2 on the module); 2.4 to 5.5 V"
    },
    {
     "title": "Common TTP229 module",
     "section": "Header order varies: check the silkscreen"
    }
   ]
  },
  {
   "id": "turbidity-sensor",
   "name": "Turbidity sensor (TS-300B / SEN0189)",
   "category": "sensor",
   "measures": [
    "turbidity"
   ],
   "pins": [
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "Signal. Up to about 4.5 V in clear water: use a voltage divider before the ADC"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "analog",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     30,
     20,
     10
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "turbidity",
    "ntu",
    "water quality",
    "sen0189",
    "torbidità",
    "qualità acqua"
   ],
   "sources": [
    {
     "title": "DFRobot SEN0189 turbidity sensor wiki",
     "section": "Supply 5 V; analog output 0 to 4.5 V, lower voltage means murkier water"
    },
    {
     "title": "DFRobot SEN0189 turbidity sensor wiki",
     "section": "Adapter board has an analog / digital switch; pin order varies between boards"
    }
   ]
  },
  {
   "id": "txs0108e-level-shifter",
   "name": "TXS0108E 8-channel level shifter",
   "category": "output",
   "pins": [
    {
     "name": "VA",
     "role": "power",
     "notes": "Low side supply: 3.3 V from the ESP32 (1.2 to 3.6 V)"
    },
    {
     "name": "A1",
     "role": "passive",
     "notes": "Low side: to ESP32 GPIOs"
    },
    {
     "name": "A2",
     "role": "passive"
    },
    {
     "name": "A3",
     "role": "passive"
    },
    {
     "name": "A4",
     "role": "passive"
    },
    {
     "name": "A5",
     "role": "passive"
    },
    {
     "name": "A6",
     "role": "passive"
    },
    {
     "name": "A7",
     "role": "passive"
    },
    {
     "name": "A8",
     "role": "passive"
    },
    {
     "name": "OE",
     "role": "passive",
     "notes": "Output enable: HIGH enables. Tie to VA"
    },
    {
     "name": "VB",
     "role": "passive",
     "notes": "High side supply, for example 5 V (1.65 to 5.5 V, at least VA)"
    },
    {
     "name": "B1",
     "role": "passive",
     "notes": "High side: to the 5 V device"
    },
    {
     "name": "B2",
     "role": "passive"
    },
    {
     "name": "B3",
     "role": "passive"
    },
    {
     "name": "B4",
     "role": "passive"
    },
    {
     "name": "B5",
     "role": "passive"
    },
    {
     "name": "B6",
     "role": "passive"
    },
    {
     "name": "B7",
     "role": "passive"
    },
    {
     "name": "B8",
     "role": "passive"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     51.8,
     16,
     3
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "txs0108e",
    "level shifter",
    "logic level converter",
    "5v to 3.3v",
    "traslatore di livello",
    "bidirectional"
   ],
   "sources": [
    {
     "title": "Texas Instruments TXS0108E datasheet",
     "section": "VCCA 1.2 to 3.6 V, VCCB 1.65 to 5.5 V; OE; weak drive, not for strong pull-ups or heavy loads"
    }
   ]
  },
  {
   "id": "uda1334a-dac",
   "name": "UDA1334A I2S stereo DAC",
   "category": "output",
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "Pin order varies between boards: match by the printed label. 3.3 V or 5 V"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "WSEL",
     "role": "spi_cs",
     "notes": "I2S word select (LRC), not SPI"
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "I2S audio data from the ESP32"
    },
    {
     "name": "BCLK",
     "role": "spi_sck",
     "notes": "I2S bit clock, not SPI"
    },
    {
     "name": "LOUT",
     "role": "passive",
     "notes": "Line out left (or use the headphone jack)"
    },
    {
     "name": "AGND",
     "role": "passive",
     "notes": "Audio ground for the line outputs"
    },
    {
     "name": "ROUT",
     "role": "passive",
     "notes": "Line out right"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "breakout",
    "size": [
     28,
     22,
     8
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "uda1334a",
    "i2s",
    "dac",
    "audio",
    "adafruit",
    "headphone",
    "convertitore audio"
   ],
   "sources": [
    {
     "title": "NXP UDA1334ATS datasheet",
     "section": "I2S-bus input BCK, WS, DATAI"
    },
    {
     "title": "Adafruit I2S Stereo Decoder UDA1334A guide",
     "section": "Pinouts"
    }
   ]
  },
  {
   "id": "uln2003-board",
   "name": "ULN2003 driver board (4 channels)",
   "category": "output",
   "pins": [
    {
     "name": "IN1",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN2",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN3",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "IN4",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "-",
     "role": "ground",
     "notes": "Share it with the ESP32 GND"
    },
    {
     "name": "+",
     "role": "passive",
     "notes": "Load supply 5 to 12 V. For a 28BYJ-48 5 V: VIN is fine"
    },
    {
     "name": "OUT1",
     "role": "passive",
     "notes": "Low-side switch to the load. White motor connector"
    },
    {
     "name": "OUT2",
     "role": "passive"
    },
    {
     "name": "OUT3",
     "role": "passive"
    },
    {
     "name": "OUT4",
     "role": "passive"
    }
   ],
   "bus": "gpio",
   "voltage": "5-12",
   "model": {
    "shape": "module",
    "size": [
     35,
     32,
     15
    ],
    "color": "#2E8B57"
   },
   "keywords": [
    "uln2003",
    "darlington",
    "driver board",
    "stepper",
    "low side",
    "transistor"
   ],
   "sources": [
    {
     "title": "Texas Instruments ULN2003A datasheet",
     "section": "Darlington array, 500 mA per channel, inputs compatible with 3.3 V logic"
    }
   ]
  },
  {
   "id": "uln2803-chip",
   "name": "ULN2803A 8-channel Darlington array (DIP-18)",
   "category": "output",
   "pins": [
    {
     "name": "1B",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Pins 1 to 8: inputs, 3.3 V logic works"
    },
    {
     "name": "2B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "3B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "4B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "5B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "6B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "7B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "8B",
     "role": "digital_in",
     "needsOutput": true
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Pin 9"
    },
    {
     "name": "COM",
     "role": "passive",
     "notes": "Pin 10: to the load supply + (flyback diodes inside)"
    },
    {
     "name": "8C",
     "role": "passive",
     "notes": "Pins 11 to 18: outputs, pull the load to GND (500 mA max each)"
    },
    {
     "name": "7C",
     "role": "passive"
    },
    {
     "name": "6C",
     "role": "passive"
    },
    {
     "name": "5C",
     "role": "passive"
    },
    {
     "name": "4C",
     "role": "passive"
    },
    {
     "name": "3C",
     "role": "passive"
    },
    {
     "name": "2C",
     "role": "passive"
    },
    {
     "name": "1C",
     "role": "passive"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     46.7,
     6.4,
     4
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "uln2803",
    "darlington",
    "transistor array",
    "low side",
    "dip-18",
    "driver"
   ],
   "sources": [
    {
     "title": "Texas Instruments ULN2803A datasheet",
     "section": "Pin functions; 500 mA per channel; 50 V outputs with clamp diodes"
    }
   ]
  },
  {
   "id": "us-100",
   "name": "US-100 ultrasonic distance",
   "category": "sensor",
   "measures": [
    "distance",
    "temperature"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "TRIG/TX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "With the jumper on: UART TX of the ESP32 goes here. Jumper off: trigger input"
    },
    {
     "name": "ECHO/RX",
     "role": "digital_out",
     "notes": "With the jumper on: UART, connect to ESP32 RX. Jumper off: echo output"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "GND2",
     "role": "ground",
     "notes": "Second ground pin, same as GND"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     45,
     20,
     17
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "us-100",
    "ultrasonic",
    "distance",
    "uart",
    "ultrasuoni",
    "distanza"
   ],
   "sources": [
    {
     "title": "US-100 ultrasonic module manual",
     "section": "Jumper selects UART (9600 baud) or trigger/echo mode; supply 2.4 to 5.5 V"
    }
   ]
  },
  {
   "id": "veml6070",
   "name": "VEML6070 UV sensor",
   "category": "sensor",
   "measures": [
    "uv"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "ACK",
     "role": "int",
     "notes": "Threshold alert output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x38",
    "0x39"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     18,
     13,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "veml6070",
    "vishay",
    "uv",
    "uva",
    "ultravioletti",
    "raggi uv"
   ],
   "sources": [
    {
     "title": "Vishay VEML6070 datasheet",
     "section": "Uses I2C addresses 0x38 and 0x39 (plus 0x0C for alert). 0x38 clashes with AHT sensors"
    },
    {
     "title": "Vishay VEML6070 datasheet",
     "section": "Command-based, no ID register"
    }
   ]
  },
  {
   "id": "veml6075",
   "name": "VEML6075 UVA + UVB sensor",
   "category": "sensor",
   "measures": [
    "uv"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "3VO",
     "role": "passive",
     "notes": "3.3 V output of the on-board regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x10"
   ],
   "idCheck": {
    "register": "0x0C",
    "expect": "0x26"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     18,
     13,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "veml6075",
    "vishay",
    "uva",
    "uvb",
    "uv index",
    "ultravioletti",
    "raggi uv"
   ],
   "sources": [
    {
     "title": "Vishay VEML6075 datasheet",
     "section": "I2C address 0x10; command code 0x0C device ID = 0x0026 (low byte 0x26 comes first)"
    },
    {
     "title": "Vishay VEML6075 datasheet",
     "section": "Part is discontinued; modules are still sold"
    }
   ]
  },
  {
   "id": "veml7700",
   "name": "VEML7700 ambient light sensor",
   "category": "sensor",
   "measures": [
    "light"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x10"
   ],
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     18,
     13,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "veml7700",
    "vishay",
    "lux",
    "light",
    "luce",
    "luminosità"
   ],
   "sources": [
    {
     "title": "Vishay VEML7700 datasheet",
     "section": "Slave address 0x10 (fixed)"
    }
   ]
  },
  {
   "id": "vibration-motor-module",
   "name": "Vibration motor module",
   "category": "output",
   "pins": [
    {
     "name": "IN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "HIGH = vibrate. The module has its own transistor"
    },
    {
     "name": "VCC",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "motor",
    "size": [
     26,
     21,
     8
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "vibration motor",
    "haptic",
    "coin motor",
    "vibrazione",
    "motorino"
   ],
   "sources": [
    {
     "title": "Generic coin vibration motor module",
     "section": "Transistor driver with flyback diode"
    }
   ]
  },
  {
   "id": "vl53l0x",
   "name": "VL53L0X time-of-flight distance",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "XSHUT",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Shutdown, active LOW. Optional; needed to use several sensors"
    },
    {
     "name": "GPIO1",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x29"
   ],
   "idCheck": {
    "register": "0xC0",
    "expect": "0xEE"
   },
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25,
     11,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "vl53l0x",
    "gy-530",
    "tof",
    "time of flight",
    "laser distance",
    "distance",
    "distanza",
    "laser"
   ],
   "sources": [
    {
     "title": "ST VL53L0X datasheet",
     "section": "Default I2C address 0x29 (0x52 8-bit)"
    },
    {
     "title": "ST VL53L0X API user manual",
     "section": "Reference register 0xC0 reads 0xEE"
    }
   ]
  },
  {
   "id": "vl53l1x",
   "name": "VL53L1X time-of-flight distance (4 m)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "XSHUT",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Shutdown, active LOW. Optional"
    },
    {
     "name": "GPIO1",
     "role": "int",
     "notes": "Interrupt output, optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x29"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25,
     13,
     1.6
    ],
    "color": "#5B2A86"
   },
   "keywords": [
    "vl53l1x",
    "tof",
    "time of flight",
    "laser distance",
    "distance",
    "distanza"
   ],
   "sources": [
    {
     "title": "ST VL53L1X datasheet",
     "section": "Default I2C address 0x29 (0x52 8-bit)"
    }
   ]
  },
  {
   "id": "vl53l4cd",
   "name": "VL53L4CD time-of-flight distance (1.3 m)",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power",
     "notes": "Pin order differs between sellers: check the silkscreen"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "GPIO1",
     "role": "int",
     "notes": "Interrupt output, optional"
    },
    {
     "name": "XSHUT",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Shutdown, active LOW. Optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x29"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25.4,
     17.8,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "vl53l4cd",
    "tof",
    "time of flight",
    "laser distance",
    "distance",
    "distanza"
   ],
   "sources": [
    {
     "title": "ST VL53L4CD datasheet",
     "section": "Default I2C address 0x29; ranging 1 mm to 1300 mm"
    }
   ]
  },
  {
   "id": "vl53l5cx",
   "name": "VL53L5CX 8x8 multizone time-of-flight",
   "category": "sensor",
   "measures": [
    "distance"
   ],
   "pins": [
    {
     "name": "INT",
     "role": "int",
     "notes": "Data ready, optional. SATEL-style order; other boards differ"
    },
    {
     "name": "I2C_RST",
     "role": "passive",
     "notes": "I2C reset, active HIGH. Tie to GND"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "LPN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Low-power enable: HIGH to talk over I2C. Can be tied to IOVDD"
    },
    {
     "name": "PWREN",
     "role": "passive",
     "notes": "Enables the on-board regulator. Tie to IOVDD"
    },
    {
     "name": "AVDD",
     "role": "power",
     "notes": "Use 3V3"
    },
    {
     "name": "IOVDD",
     "role": "power",
     "notes": "Use 3V3"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x29"
   ],
   "voltage": "3.3",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     25,
     16,
     1.6
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "vl53l5cx",
    "tof",
    "multizone",
    "8x8",
    "depth",
    "distance",
    "distanza"
   ],
   "sources": [
    {
     "title": "ST VL53L5CX datasheet",
     "section": "Default I2C address 0x29 (0x52 8-bit); firmware is uploaded by the host at every start (about 86 kB)"
    },
    {
     "title": "ST UM2884 VL53L5CX ULD guide",
     "section": "LPn must be HIGH to enable I2C communication"
    }
   ]
  },
  {
   "id": "vl6180x",
   "name": "VL6180X time-of-flight proximity + light",
   "category": "sensor",
   "measures": [
    "distance",
    "light"
   ],
   "pins": [
    {
     "name": "VIN",
     "role": "power"
    },
    {
     "name": "2V8",
     "role": "passive",
     "notes": "Output of the on-board 2.8 V regulator. Leave unconnected"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "SCL",
     "role": "i2c_scl"
    },
    {
     "name": "SDA",
     "role": "i2c_sda"
    },
    {
     "name": "GPIO",
     "role": "int",
     "notes": "Interrupt output (GPIO1), optional"
    },
    {
     "name": "SHDN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Shutdown, active LOW. Optional"
    }
   ],
   "bus": "i2c",
   "addresses": [
    "0x29"
   ],
   "voltage": "3.3-5",
   "pullupsOnBoard": true,
   "model": {
    "shape": "breakout",
    "size": [
     20.3,
     17.8,
     1.6
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "vl6180x",
    "vl6180",
    "tof",
    "time of flight",
    "proximity",
    "distance",
    "distanza"
   ],
   "sources": [
    {
     "title": "ST VL6180X datasheet",
     "section": "Default I2C address 0x29; model ID 0xB4 in 16-bit register 0x000"
    },
    {
     "title": "ST VL6180X datasheet",
     "section": "Ranging 0 to 100 mm; ambient light sensor"
    }
   ]
  },
  {
   "id": "voltage-sensor-25v",
   "name": "Voltage sensor module (0-25 V divider)",
   "category": "sensor",
   "measures": [
    "voltage"
   ],
   "pins": [
    {
     "name": "S",
     "role": "analog_out",
     "notes": "Input voltage divided by 5. Keep the measured voltage under about 16 V so S stays below 3.3 V"
    },
    {
     "name": "+",
     "role": "passive",
     "notes": "Not connected inside the module"
    },
    {
     "name": "-",
     "role": "ground"
    },
    {
     "name": "VCC_IN",
     "role": "passive",
     "notes": "Screw terminal: voltage to measure"
    },
    {
     "name": "GND_IN",
     "role": "passive",
     "notes": "Screw terminal: ground of the measured circuit"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     27,
     14,
     12
    ],
    "color": "#B22222"
   },
   "keywords": [
    "voltage sensor",
    "divider",
    "battery",
    "voltmeter",
    "tensione",
    "batteria",
    "partitore"
   ],
   "sources": [
    {
     "title": "Generic 0-25 V voltage sensor module",
     "section": "30 kΩ / 7.5 kΩ resistor divider (ratio 1:5)"
    }
   ]
  },
  {
   "id": "ir-receiver-vs1838b",
   "name": "VS1838B IR remote receiver",
   "category": "input",
   "pins": [
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "Left leg, dome towards you. LOW while an IR burst is received"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Middle leg"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Right leg. Use 3V3"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "chip",
    "size": [
     8.6,
     5.5,
     9
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "vs1838b",
    "ir receiver",
    "remote",
    "infrared",
    "38 khz",
    "telecomando",
    "ricevitore ir"
   ],
   "sources": [
    {
     "title": "VS1838B datasheet",
     "section": "Pin 1 OUT, 2 GND, 3 VCC; 38 kHz carrier; supply 2.7 to 5.5 V"
    }
   ]
  },
  {
   "id": "w25q64-flash",
   "name": "W25Q64 SPI flash memory (8 MB)",
   "category": "output",
   "pins": [
    {
     "name": "CS",
     "role": "spi_cs",
     "notes": "Chip select, active LOW. Never use ESP32 GPIO 6 to 11"
    },
    {
     "name": "DO",
     "role": "spi_miso",
     "notes": "Data out (IO1)"
    },
    {
     "name": "WP",
     "role": "passive",
     "notes": "Write protect, active LOW. Tie to VCC"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DI",
     "role": "spi_mosi",
     "notes": "Data in (IO0)"
    },
    {
     "name": "CLK",
     "role": "spi_sck"
    },
    {
     "name": "HOLD",
     "role": "passive",
     "notes": "Hold, active LOW. Tie to VCC"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "2.7 to 3.6 V. Never 5 V"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "chip",
    "size": [
     21.4,
     5.3,
     1.8
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "w25q64",
    "winbond",
    "spi flash",
    "nor flash",
    "memory",
    "storage",
    "memoria flash"
   ],
   "sources": [
    {
     "title": "Winbond W25Q64FV datasheet",
     "section": "Pin configuration SOIC 208-mil; JEDEC ID EF 40 17 (instruction 9Fh); supply 2.7 to 3.6 V"
    }
   ]
  },
  {
   "id": "w5500-ethernet",
   "name": "W5500 Ethernet module",
   "category": "output",
   "pins": [
    {
     "name": "3V3",
     "role": "power"
    },
    {
     "name": "5V",
     "role": "passive",
     "notes": "Alternative 5 V input. Use either 3V3 or 5V, not both"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "RST",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Reset, active LOW"
    },
    {
     "name": "INT",
     "role": "int"
    },
    {
     "name": "MOSI",
     "role": "spi_mosi"
    },
    {
     "name": "MISO",
     "role": "spi_miso"
    },
    {
     "name": "SCLK",
     "role": "spi_sck"
    },
    {
     "name": "SCS",
     "role": "spi_cs",
     "notes": "SPI chip select"
    },
    {
     "name": "NC",
     "role": "passive",
     "notes": "Not connected"
    }
   ],
   "bus": "spi",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     55,
     28,
     17
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "w5500",
    "ethernet",
    "lan",
    "wiznet",
    "rj45",
    "rete"
   ],
   "sources": [
    {
     "title": "WIZnet W5500 datasheet",
     "section": "SPI interface (SCSn, SCLK, MOSI, MISO); supply 3.3 V"
    }
   ]
  },
  {
   "id": "water-level-sensor",
   "name": "Water level sensor strip",
   "category": "sensor",
   "measures": [
    "water level"
   ],
   "pins": [
    {
     "name": "S",
     "role": "analog_out",
     "notes": "Higher voltage means more of the strip is under water. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "Marked + on the board. Use 3V3"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Marked - on the board"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     20,
     62,
     3
    ],
    "color": "#B22222"
   },
   "keywords": [
    "water level",
    "water sensor",
    "liquid",
    "livello acqua",
    "acqua"
   ],
   "sources": [
    {
     "title": "Generic water level sensor module",
     "section": "Exposed traces with an NPN transistor, analog output"
    }
   ]
  },
  {
   "id": "wind-vane",
   "name": "Wind vane (resistor network)",
   "category": "sensor",
   "measures": [
    "wind direction"
   ],
   "pins": [
    {
     "name": "1",
     "role": "analog_out",
     "notes": "Add a 10 kΩ resistor from this pin to 3V3. To an ADC1 pin (GPIO 32 to 39)"
    },
    {
     "name": "2",
     "role": "ground"
    }
   ],
   "bus": "analog",
   "voltage": "3.3",
   "model": {
    "shape": "module",
    "size": [
     80,
     30,
     40
    ],
    "color": "#F2F2F2"
   },
   "keywords": [
    "wind vane",
    "wind direction",
    "weather station",
    "banderuola",
    "direzione vento",
    "meteo"
   ],
   "sources": [
    {
     "title": "SparkFun Weather Meter Kit datasheet (SEN-15901)",
     "section": "Wind vane: 8 reed switches and resistors give 16 directions; read with a 10 kΩ pull-up"
    }
   ]
  },
  {
   "id": "ws2811-strip-12v",
   "name": "WS2811 12 V addressable LED strip",
   "category": "display",
   "pins": [
    {
     "name": "12V",
     "role": "passive",
     "notes": "12 V from a separate supply. Never to the ESP32"
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data in. A 3.3 V to 5 V level shifter makes it reliable"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Share it with the 12 V supply and the ESP32 GND"
    }
   ],
   "bus": "gpio",
   "voltage": "12",
   "model": {
    "shape": "module",
    "size": [
     60,
     12,
     2
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "ws2811",
    "12v",
    "led strip",
    "addressable",
    "rgb",
    "striscia led 12v"
   ],
   "sources": [
    {
     "title": "Worldsemi WS2811 datasheet",
     "section": "One IC drives 3 LEDs (one pixel); data input high level 0.7 × VDD"
    }
   ]
  },
  {
   "id": "ws2812-matrix-8x8",
   "name": "WS2812 8x8 LED matrix",
   "category": "display",
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Needs a 5 V supply able to give enough current (up to 3.8 A at full white)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data in. Add a 330 Ω resistor"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     65,
     65,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ws2812",
    "neopixel",
    "led matrix",
    "8x8",
    "rgb",
    "matrice led"
   ],
   "sources": [
    {
     "title": "Worldsemi WS2812B datasheet",
     "section": "Supply 3.5 to 5.3 V; up to about 60 mA per LED at full white"
    }
   ]
  },
  {
   "id": "ws2812-ring",
   "name": "WS2812 LED ring (16 LEDs)",
   "category": "display",
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Use VIN"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DI",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data in. Add a 330 Ω resistor"
    },
    {
     "name": "DO",
     "role": "passive",
     "notes": "Data out to the next ring. Leave unconnected"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     44,
     44,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ws2812",
    "neopixel",
    "led ring",
    "rgb",
    "addressable",
    "anello led"
   ],
   "sources": [
    {
     "title": "Worldsemi WS2812B datasheet",
     "section": "Data input high level 0.7 × VDD"
    }
   ]
  },
  {
   "id": "ws2812b-strip",
   "name": "WS2812B addressable LED strip",
   "category": "display",
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Use VIN for a few LEDs; a separate 5 V supply for more (up to 60 mA per LED)"
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data in. Add a 330 Ω resistor; a 3.3 V to 5 V level shifter makes it reliable"
    },
    {
     "name": "GND",
     "role": "ground"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     60,
     10,
     2
    ],
    "color": "#EDEDED"
   },
   "keywords": [
    "ws2812b",
    "neopixel",
    "led strip",
    "rgb",
    "addressable",
    "striscia led"
   ],
   "sources": [
    {
     "title": "Worldsemi WS2812B datasheet",
     "section": "Supply 3.5 to 5.3 V; data input high level 0.7 × VDD"
    }
   ]
  },
  {
   "id": "ws2812-matrix-8x32",
   "name": "WS2812B flexible LED matrix 8x32",
   "category": "display",
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "256 LEDs: up to about 15 A at full white. Use a separate 5 V supply and limit brightness"
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data in. Add a 330 Ω resistor; a 3.3 V to 5 V level shifter makes it reliable"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Share it with the 5 V supply and the ESP32 GND"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     80,
     80,
     2
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ws2812b",
    "neopixel",
    "matrix",
    "8x32",
    "led panel",
    "addressable",
    "matrice led"
   ],
   "sources": [
    {
     "title": "Worldsemi WS2812B datasheet",
     "section": "Supply 3.5 to 5.3 V; each LED up to about 60 mA at full white"
    }
   ]
  },
  {
   "id": "ws2812b-module",
   "name": "WS2812B single RGB LED module",
   "category": "display",
   "pins": [
    {
     "name": "5V",
     "role": "power",
     "notes": "Datasheet range 3.5 to 5.3 V. At 3V3 it often works, blue is dimmer"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "DIN",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Data in. At 5 V supply a level shifter makes it reliable"
    },
    {
     "name": "DOUT",
     "role": "passive",
     "notes": "Data out to the next LED"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "led",
    "size": [
     11.2,
     10,
     3
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "ws2812b",
    "neopixel",
    "5050",
    "rgb led",
    "addressable",
    "led rgb"
   ],
   "sources": [
    {
     "title": "Worldsemi WS2812B datasheet",
     "section": "Supply 3.5 to 5.3 V; data input high level 0.7 × VDD"
    }
   ]
  },
  {
   "id": "xkc-y25",
   "name": "XKC-Y25 non-contact liquid level sensor",
   "category": "sensor",
   "measures": [
    "water level"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Brown wire. Accepts 5 to 24 V: use VIN"
    },
    {
     "name": "OUT",
     "role": "digital_out",
     "notes": "Yellow wire. On the -V version its HIGH level is the supply (5 V): use a voltage divider"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Blue wire"
    },
    {
     "name": "MODE",
     "role": "passive",
     "notes": "Black wire. Selects whether OUT is HIGH or LOW with liquid; see the seller sheet"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     28,
     28,
     16
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "xkc-y25",
    "liquid level",
    "non-contact",
    "capacitive",
    "livello liquido",
    "serbatoio"
   ],
   "sources": [
    {
     "title": "XKC-Y25 seller datasheet",
     "section": "Supply 5 to 24 V; brown +V, yellow OUT, blue GND, black mode; senses through a non-metal wall up to 20 mm"
    },
    {
     "title": "XKC-Y25 seller datasheet",
     "section": "Versions: -V (voltage out), -NPN, -PNP; check which one you have"
    }
   ]
  },
  {
   "id": "xl6009-boost",
   "name": "XL6009 boost converter",
   "category": "output",
   "pins": [
    {
     "name": "IN+",
     "role": "passive",
     "notes": "Input 5 to 32 V"
    },
    {
     "name": "IN-",
     "role": "ground",
     "notes": "Input ground, same as OUT-"
    },
    {
     "name": "OUT+",
     "role": "passive",
     "notes": "Adjustable 5 to 35 V, above the input. Set it with the trimmer BEFORE wiring"
    },
    {
     "name": "OUT-",
     "role": "ground",
     "notes": "To the ESP32 GND"
    }
   ],
   "bus": "gpio",
   "voltage": "5-32",
   "model": {
    "shape": "module",
    "size": [
     48,
     23,
     14
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "xl6009",
    "boost",
    "step up",
    "dc-dc",
    "regulator",
    "elevatore di tensione"
   ],
   "sources": [
    {
     "title": "XLSEMI XL6009 datasheet",
     "section": "Input 5 to 32 V; 4 A switch current; 1.25 V feedback reference"
    }
   ]
  },
  {
   "id": "yf-s201",
   "name": "YF-S201 water flow sensor",
   "category": "sensor",
   "measures": [
    "flow"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire. Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    },
    {
     "name": "SIG",
     "role": "digital_out",
     "notes": "Yellow wire. Pulses at the supply level: use a voltage divider. About 7.5 pulses per second per L/min"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     60,
     35,
     26
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "yf-s201",
    "water flow",
    "flow meter",
    "hall",
    "flussometro",
    "portata",
    "acqua"
   ],
   "sources": [
    {
     "title": "Seeed YF-S201 water flow sensor wiki",
     "section": "Supply 5 to 18 V; pulse output, F = 7.5 × Q (L/min)"
    }
   ]
  },
  {
   "id": "yf-s401",
   "name": "YF-S401 small water flow sensor",
   "category": "sensor",
   "measures": [
    "flow"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Red wire. Needs 5 V: use VIN"
    },
    {
     "name": "GND",
     "role": "ground",
     "notes": "Black wire"
    },
    {
     "name": "SIG",
     "role": "digital_out",
     "notes": "Yellow wire. Pulses at the supply level: use a voltage divider. About 98 pulses per second per L/min"
    }
   ],
   "bus": "gpio",
   "voltage": "5",
   "model": {
    "shape": "module",
    "size": [
     40,
     20,
     20
    ],
    "color": "#1A1A1A"
   },
   "keywords": [
    "yf-s401",
    "water flow",
    "flow meter",
    "hall",
    "flussometro",
    "portata",
    "acqua"
   ],
   "sources": [
    {
     "title": "YF-S401 seller datasheet",
     "section": "Supply 5 to 24 V; range 0.3 to 6 L/min; about 5880 pulses per litre. Calibrate with a known volume"
    }
   ]
  },
  {
   "id": "yx5300-mp3",
   "name": "YX5300 serial MP3 player (Catalex)",
   "category": "output",
   "pins": [
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "VCC",
     "role": "power",
     "notes": "3.2 to 5.2 V"
    },
    {
     "name": "TX",
     "role": "digital_out",
     "notes": "Module transmits: to an ESP32 RX pin. 9600 baud"
    },
    {
     "name": "RX",
     "role": "digital_in",
     "needsOutput": true,
     "notes": "Module receives: from an ESP32 TX pin"
    }
   ],
   "bus": "gpio",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     43,
     25,
     12
    ],
    "color": "#B22222"
   },
   "keywords": [
    "yx5300",
    "yx6300",
    "mp3",
    "catalex",
    "serial mp3",
    "micro sd",
    "lettore mp3"
   ],
   "sources": [
    {
     "title": "Catalex Serial MP3 Player v1.0 manual",
     "section": "UART 9600 bps; supply 3.2 to 5.2 V; command frame 7E FF 06 ... EF"
    }
   ]
  },
  {
   "id": "zmpt101b",
   "name": "ZMPT101B AC voltage sensor module",
   "category": "sensor",
   "measures": [
    "voltage"
   ],
   "pins": [
    {
     "name": "VCC",
     "role": "power",
     "notes": "Use 3V3 so OUT stays under 3.3 V. Some boards have a second GND pin"
    },
    {
     "name": "OUT",
     "role": "analog_out",
     "notes": "AC wave centred on VCC/2; set the amplitude with the trimmer. To an ADC pin (prefer ADC1: GPIO 32 to 39)"
    },
    {
     "name": "GND",
     "role": "ground"
    },
    {
     "name": "L",
     "role": "passive",
     "notes": "MAINS input! Only a qualified person connects this. Never to the ESP32"
    },
    {
     "name": "N",
     "role": "passive",
     "notes": "MAINS input! Only a qualified person connects this. Never to the ESP32"
    }
   ],
   "bus": "analog",
   "voltage": "3.3-5",
   "model": {
    "shape": "module",
    "size": [
     49,
     19,
     20
    ],
    "color": "#1F4FA8"
   },
   "keywords": [
    "zmpt101b",
    "ac voltage",
    "mains",
    "voltage transformer",
    "tensione alternata",
    "rete elettrica"
   ],
   "sources": [
    {
     "title": "ZMPT101B voltage transformer datasheet",
     "section": "2 mA:2 mA current transformer for voltage sensing"
    },
    {
     "title": "Espressif ESP32 Technical Reference Manual",
     "section": "ADC: input range and attenuation"
    }
   ]
  }
 ]
}