
Type e
google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards

A thermal imaging module consisting of XIAO RP2040 & WAVESHARE MLX90640 for thermal camera and XIAO for the onboard processing
MODULE IHSC is an open-source printed circuit board by RishabhMewada, from the RishabhMewada/MODULE-IHSC repository on GitHub, published under the MIT licence. It is a 2-layer board of 40 × 40 mm with 16 parts on 16 nets, routed with 80 tracks and 0 vias.
Its parts include 3 capacitors, 3 resistors, 1 IC, 1 transistor and 1 connector. It belongs with the RP2040 boards of this library.
A thermal imaging module consisting of XIAO RP2040 & MLX90640 for thermal camera and XIAO for the onboard processing which supports usb type c streaming and usb screen sharing extension via an 4 pin I2C extension
The goal of this project was to design a low profile thermal camera module capable of streaming live footage over to the screen via type c and I2C pins
things considerd in mind to make it happen
Core Hardware
The PCB is designed using KiCad (open-source) and the case using Fusion 360.
Specifications
All PCB source files are available in /hardware/kicad.
Raw MLX90640 32×24 thermal array with 768 pixels, connected directly via I2C with 110° wide field of view built into the camera and have the abillity to measure −40 °C to +300 °C measurement range Dual I2C bus architecture — sensor on I2C1 (GP6/GP7), display on I2C0 (GP4/GP5) to prevent bus conflicts
Full 7-stop rainbow colour mapping (violet → blue → cyan → green → yellow → orange → red) Bicubic interpolation upscaling from 32×24 to full display resolution which will convert it into Real-time hotspot and coldspot crosshair overlays with temperature labels Live temperature scale bar rendered on-screen
USB-CDC mode — binary frame stream over via a Type-C cable to a PC host viewer I2C display mode — frames rendered directly onto an external OLED via the 4-pin PCB connector (SSD1306 128×64 or SH1107 128×128) BOTH mode — simultaneous USB stream and I2C display output Smart startup auto-detection: defaults to BOTH if display and USB host are both detected, I2C is used only if no PC is connected or USB if no display is found
Short-press mode button cycles USB → I2C → BOTH → USB in real time Long-press mode button saves current mode to flash (persists across reboots) PC-side display_switch.py utility to switch modes remotely over USB without touching the device Soft-reset trigger from PC so new mode activates immediately without unplugging (made for future integration)
Live OpenCV window with rainbow heatmap whit support up to 30 fps Bicubic interpolation for smooth upscaled display Adjustable window scale factor and it Cycle's through 5 colour maps: Rainbow, Inferno, Plasma, Bone, Jet and the Temperature range lock/unlock (freeze min–max for consistent colour mapping) and shows Hotspot and coldspot crosshairs with live °C labels and it has a Full-screen toggle Live FPS counter and frame index overlay
Query current output mode from the device which Switchs to the output mode (USB / I2C / BOTH) via command line and Scan the 4-pin I2C connector bus to detect connected display hardware and then the Live frame monitor — prints per-frame FPS, Tmin, Tmax, and checksum status and it also Auto-detects RP2040 serial port (no --port flag needed in most cases)
~30 fps live thermal stream at 32 Hz sensor refresh rate in the MLX90640 camera -USB-CDC frame size: 1562 bytes per frame (~47 KB/s, well within USB bandwidth) and uses Binary framing protocol with magic header and checksum validation for data integrity and Frame index tracking for dropped frame detection
Power button (GP28): short press pauses/resumes streaming; long press enters light-sleep Mode button (GP29): short press cycles output mode; long press saves mode to flash Buzzer (GP27): distinct beep patterns for each event — power-on, mode switch (unique per mode), mode saved, sleep, and error
Single long beep on power-on 1 beep = USB mode selected 2 beeps = I2C display mode selected 3 beeps = BOTH mode / mode saved to flash Double beep = entering sleep 5 rapid beeps = sensor not found (wiring error)
Output mode saved to output_mode.json on the RP2040's onboard flash Automatically restored on every reboot with no user intervention
Firmware files are located in /firmware.
The complete bill of materials (BOM), including purchase links, is available in
/hardware/bom.csv.
Manufacturing & sourcing:
PCB fabrication: JLCPCB
Components (India): Robu.in
Enclosure: Online 3D printing services (if needed)
| Name | Quantity | Total Cost (USD) | Distributor | Link |
|---|---|---|---|---|
| PCB | 5 | $8.00 | JLCPCB | Buy |
| Soldering Flux | 1 | $0.27 | Robu.in | Buy |
| MLX90640 | 1 | $37.48 | Digikey.in | Buy |
| XIAO RP2040 | 1 | $6.41 | Robocraze.in | Buy |
| Buzzer (BZ1) | 1 | $0.15 | Robu.in | Buy |
| 1×4 Pin Header (J1) | 1 | $0.14 | Robu.in | Buy |
| Low Profile Tactile Switch SMD | 1 | $0.11 | Robu.in | Buy |
| Resistor 4.7 kΩ 0603 (R2) | 2 | $0.11 | Robu.in | Buy |
| Resistor 1 kΩ 0805 (R1) | 1 | $0.11 | Robu.in | Buy |
| Capacitor 100 nF 0805 (C1) | 1 | $0.12 | Robu.in | Buy |
| Capacitor 1 µF 0603 (C3) | 1 | $0.11 | Robu.in | Buy |
| Capacitor 10 µF 0805 (C2) | 1 | $0.11 | Robu.in | Buy |
| 2N2219 Transistor | 1 | $ | link | |
| Total | $77.81 |
please note that most of the parts are from indian suppliers !
*note there's also a transistor in the project (2N2219) but it's not available anywhere online for me that's why it's not included in the BOM with price and link
This project is open-source hardware and software and is released under the MIT License.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | MountingHole | MountingHole:MountingHole_2.1mm | H1, H2, H3, H4 |
| 2 | 4.7k | Resistor_SMD:R_0603_1608Metric | R2, R3 |
| 1 | 100nF | Capacitor_SMD:C_0603_1608Metric | C2 |
| 1 | 1k | Resistor_SMD:R_0805_2012Metric | R1 |
| 1 | 1uF | Capacitor_SMD:C_0603_1608Metric | C3 |
| 1 | 1uF - 10uF | Capacitor_SMD:C_0805_2012Metric | C1 |
| 1 | 2N2219 | Package_TO_SOT_THT:TO-39-3 | Q1 |
| 1 | Buzzer | Buzzer_Beeper:Buzzer_12x9.5RM7.6 | BZ1 |
| 1 | Conn_01x04_Pin | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Horizontal | J1 |
| 1 | MLX90640ESF-BAA-000-SP | MLX90640ESF-BAA-000-SP:TO292P930H600-4 | A1 |
| 1 | SW_Push | Button_Switch_SMD:SW_SPST_TL3342 | SW1 |
| 1 | seedstudio RP2040 | XIAO RP2040:MODULE_102010428 | U1 |
It measures 40 × 40 mm and has 2 copper layers, 1.6 mm thick.
16 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the RishabhMewada/MODULE-IHSC repository on GitHub, at the commit this page was made from: the board is hardware/Kicad/MODULE-IHSC.kicad_pcb and its schematic hardware/Kicad/MODULE-IHSC.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards

conorpp/u2f-zero
U2F USB token optimized for physical security, affordability, and style

rusefi/rusefi
rusefi - GPL internal combustion engine control unit

VoronDesign/Voron-Hardware
Cool Hardware designed by the Voron Design group

hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

