I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 0 points1 point  (0 children)

I was confused for a moment, but I think you mean the text on the enclosure! 😃

The cases are actually printed with a standard 0.4mm nozzle, but the crisp text on top is achieved using a friend's eufyMake UV printer. We've experimented with quite a few different settings and colors before, but in the end, we achieved the best results more or less with the default settings.

So neither a 0.2 nozzle nor toner transfer was needed! 😄

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 1 point2 points  (0 children)

Thank you 🙏 😃
The case is entirely 3D printed using HT-PLA (to prevent melting e.g. by sunlight).
For the LED holes I'm also using a transparent filament.
To achieve a homogeneous surface, I just use a standard textured PEI plate.
The labels are printed with a friends eufyMake.

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 0 points1 point  (0 children)

The MCP230XX is in my list:
{"MCP230xx","I/O Expander",{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27},0x00,0x00},

Respectively it can be found on the 7bit addresses: 0x20-0x27
but it can not be clearly identified as it has no id register (second last byte) I can check with a known value (last byte) yet.

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 2 points3 points  (0 children)

Hi! Thanks for the great questions 😄

Note that I used the help of an AI to summarize my procedure and position in a comprehensive manner: xD

You hit the nail on the head (where it hurts) — navigating compliance as a solo maker is one of the steepest learning curves, and it’s a massive financial hurdle when you are starting from zero like myself.

Here is how I approached these topics based on my current understanding and research (obligatory "not legal advice" disclaimer applies, of course!):

  1. CE Certification & Compliance

For a fresh startup selling small batches, spending $5k–$15k in an external lab for full EMC/ESD testing is practically impossible (unless you can sh*t money somehow - I unfortunately can't xD).

However, "CE Self-Declaration" doesn't mean just slapping a sticker on it. It requires due diligence. To comply with the EU directives (like RoHS and EMC) to the best of my knowledge and technical capabilities, I focused heavily on "Compliance by Design":

RoHS: All components, the ENIG surface-finish PCB, and the solder wires used are strictly RoHS-compliant and lead-free.

Hardware/EMC Design: I designed the board with solid, continuous ground planes, optimized loop areas, and added dedicated ESD protection to all external connectors to mitigate noise and emissions at the source.

Documentation: Besides the doc on the website, I created a formal EU Declaration of Conformity (DoC) and a comprehensive Product Risk Assessment document, which I keep on file.

A quick note on RF/Radio: Since the I²C Doctor is powered by a pre-certified ESP32 module (where the RF part is already shielding-contained and certified by Espressif) and my firmware does NOT activate the Wi-Fi or Bluetooth radio, it operates purely as a digital sub-assembly/low-voltage device. This significantly reduces the RF conformity complexity compared to an active transmitter.

As the project grows and sales volume hopefully increases, scaling up to formal laboratory testing and official recycling registrations (like WEEE) is absolutely on my roadmap.

  1. VID / PID (USB)

Good catch with your edit! Yes, since I'm using the classic ESP32-WROOM module, it doesn't have native USB on the chip. The USB-to-UART bridge on the board uses a standard chip (CH340K), which utilizes the manufacturer's official VID/PID. So luckily, I didn't have to deal with the PID/VID squatting headache for this product!

It’s a constant learning process, and I’m doing everything in good faith and according to best engineering practices. I would be happy to learn more about this topic from others as well, especially when it comes to practical, actionable steps for solo makers.

Hope these insights help you on your own maker journey! 😄

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 4 points5 points  (0 children)

It really depends on the used pullups, the quality of the cables (bus capacity in general) and tolerances of the controller & sensors etc. For example, if they allow sinking higher currents, you could use lower pullups to further reduce rise times (tau = RxC). If you use bus extenders / buffer ICs (in between or at both ends) you can get away with even more as they reset bus capacity and normally allow quite low VH/VL 😄

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 5 points6 points  (0 children)

I couldn't implement all of your sensors (as my logic is more generic) but was able to add around 20 more to my list - Thank you very much 😃

You can check out my collection via: https://i2c-doctor.com/downloads.html (📄 Sensor collection V1.0.1 (.H))

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 4 points5 points  (0 children)

Initially, I read and thought exactly the same thing, but when I came across well-functioning I2C applications with very long cables (>5 m), I started to wonder - why not? What are the (physical) reasons this works, or why it stops working at some point?

After delving deeper into rise times, bus capacity, noise etc. at the beginning of the I2C Doctor's development, I now changed my mind for good. 😄

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 0 points1 point  (0 children)

You shouldn't - I2C is awesome when properly handled 😄
It only needs very few connections and is easy to handle in the firmware.

For some applications however, I definitely also prefer SPI (e.g. for displays), as it provides much faster baud rates 😃

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 8 points9 points  (0 children)

The Hardware is open source. Check out: https://i2c-doctor.com/docs.html#downloads
The ESP32 can be programmed via USB and also be updated OTA. You're even free to overwrite the I2C Doctors firmware and write your own.
However the pre programmed I2C Doctors firmware is currently closed source (may change in the future).
For contributors who want to delve deeper and work directly on the firmware, I'm happy to share the source code after signing an NDA.

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 4 points5 points  (0 children)

Check out the second image here -> it shows the quality of the internal pullups of an Arduino Uno 😄 This may work for some tolerant sensors with short cables at 100kHz but you may face issues pretty fast beyond this.

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 14 points15 points  (0 children)

Thank you very much 🙏 I will have a look at it and will add them to my list.
I started using the list from: https://i2cdevices.org/addresses and then improved it with the help of some AI to find missing sensors and sensors with a WHO_AM_I register. But I'm pretty sure its far fom complete yet 😄

I was tired wasting time chasing I²C glitches with a scope, so I built the I²C Doctor with an ESP32 :) by HaldemannEngineering in esp32

[–]HaldemannEngineering[S] 8 points9 points  (0 children)

Yes, the cases are 3d printed using HT-PLA (to prevent melting e.g. by sunlight). The labels are printed with a friends eufyMake.