PCP heating not detected in single pioreactor

Happy Monday!

I’ve been having an issue with a single pioreactor in my array, with it being unable to proceed with calibrations due to the PCB heating not being detected. I replaced the PCB with a new unit, but the problem remains, which leads me to believe its a HAT issue.

I ran pio version -v on the command line and this is the output:
pioreactor@pio08:~ $ pio version -v
Pioreactor app: 26.2.26
Pioreactor HAT: 1.2
Pioreactor firmware:
Bioreactor model name: Pioreactor 40ml, v1.5
HAT serial number: 5db46022-156c-42c6-885a-92691184ff9d
Operating system: Linux-6.12.47+rpt-rpi-v8-aarch64-with-glibc2.41
Raspberry Pi: Raspberry Pi 4 Model B Rev 1.5
Image version: e990902c466a30253b3abeb6b8b7f706f1c3fa61

I thought it could be rp2040 being wonky, so then I ran sudo systemctl status load_rp2040 and got this output:
pioreactor@pio08:~ $ sudo systemctl status load_rp2040
β—‹ load_rp2040.service - Load program into RP2040
Loaded: loaded (/etc/systemd/system/load_rp2040.service; disabled; preset: enabled)
Active: inactive (dead) since Mon 2026-03-09 12:36:37 GMT; 13s ago
Invocation: 46ca0802f72f4284b41697d0ea39e1d6
Process: 1198 ExecStart=/bin/bash /usr/local/bin/load_rp2040.sh (code=exited, status=0/SUCCESS)
Process: 1201 ExecStartPost=/opt/pioreactor/venv/bin/pio log -m load_rp2040.service successful -n systemd --local-only (code=exited, status=0/SUCCESS)
Main PID: 1198 (code=exited, status=0/SUCCESS)
CPU: 867ms

Mar 09 12:36:37 pio08 bash[1200]: xPSR: 0xf1000000 pc: 0x000000ea msp: 0x20041f00
Mar 09 12:36:37 pio08 bash[1200]: 10632 bytes written at address 0x20000000
Mar 09 12:36:37 pio08 bash[1200]: downloaded 10632 bytes in 0.303226s (34.241 KiB/s)
Mar 09 12:36:37 pio08 bash[1198]: + success=1
Mar 09 12:36:37 pio08 bash[1198]: + break

Finally, I tried updating the firmware, but it failed with this error below:
pioreactor@pio08:~ $ pio update firmware
Traceback (most recent call last):
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/pioreactor/mureq.py”, line 188, in yield_response
conn.request(method, path, headers=dict(headers), body=body)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File β€œ/usr/lib/python3.13/http/client.py”, line 1338, in request
self._send_request(method, url, body, headers, encode_chunked)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File β€œ/usr/lib/python3.13/http/client.py”, line 1384, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File β€œ/usr/lib/python3.13/http/client.py”, line 1333, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File β€œ/usr/lib/python3.13/http/client.py”, line 1093, in _send_output
self.send(msg)
~~~~~~~~~^^^^^
File β€œ/usr/lib/python3.13/http/client.py”, line 1037, in send
self.connect()
~~~~~~~~~~~~^^
File β€œ/usr/lib/python3.13/http/client.py”, line 1472, in connect
super().connect()
~~~~~~~~~~~~~~~^^
File β€œ/usr/lib/python3.13/http/client.py”, line 1003, in connect
self.sock = self._create_connection(
~~~~~~~~~~~~~~~~~~~~~~~^
(self.host,self.port), self.timeout, self.source_address)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File β€œ/usr/lib/python3.13/socket.py”, line 840, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File β€œ/usr/lib/python3.13/socket.py”, line 977, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
socket.gaierror: [Errno -3] Temporary failure in name resolution

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File β€œ/opt/pioreactor/venv/bin/pio”, line 6, in
sys.exit(pio())
~~~^^
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/click/core.py”, line 1157, in call
return self.main(*args, **kwargs)
~~~~~~~~~^^^^^^^^^^^^^^^^^
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/click/core.py”, line 1078, in main
rv = self.invoke(ctx)
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/click/core.py”, line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/click/core.py”, line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/click/core.py”, line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/click/core.py”, line 783, in invoke
return __callback(*args, **kwargs)
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/pioreactor/cli/pio.py”, line 1232, in update_firmware
get(f"https://api.github.com/repos/pioreactor/pico-build/releases/{version}").body
~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/pioreactor/mureq.py”, line 77, in get
return request(β€œGET”, url=url, **kwargs)
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/pioreactor/mureq.py”, line 60, in request
with yield_response(method, url, **kwargs) as response:
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File β€œ/usr/lib/python3.13/contextlib.py”, line 141, in enter
return next(self.gen)
File β€œ/opt/pioreactor/venv/lib/python3.13/site-packages/pioreactor/mureq.py”, line 195, in yield_response
raise HTTPException(str(e)) from e
http.client.HTTPException: [Errno -3] Temporary failure in name resolution

Any ideas on how to proceed? Thank you!

Hi @ucl_star,

So it’s not a firmware issue (the heater doesn’t use the firmware). If you replaced the heater PCB already, I would suspect that part is fine. So it could be HAT or cable. A cable is usually provided with the replacement part, so I’m going to assume you’ve replaced the cable too.

If you SSH into that worker, and run:

sudo i2cdetect -y 1

What is the output? The heater PCB is at address 4f. That should be there.

Hey Cam, here is the output of the command:

pioreactor@pio08:~ $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: – – – – – – – –
10: – – – – – – – – – – – – – – – –
20: – – – – – – – – – – – – – – – –
30: – – – – – – – – – – – – – – – –
40: – – – – – – – – – – – – – – – –
50: – – – – – – – – – – – – – – – –
60: – – – – – – – – – – – – – – – –
70: – – – – – – – –

Seems that the PCB address isn’t there, along with some other adresses? This is what I get from my leader:
pioreactor@pio01:~ $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: – – – – – – – –
10: – – – – – – – – – – – – – – – –
20: – – – – – – – – – – – – 2c – – –
30: – – – – – – – – – 39 – – – – – –
40: – – – – – – – – – 49 4a – – – – 4f
50: – – – – – – – – – – – – – – – –
60: – – – – – – – – – – – – – – – –
70: – – – – – – – –

So probably the error isn’t in the heater pcb, but the rest of the i2c bus! Can you start unplugging eye-spys and seeing if you get results again? If so, inspect the connectors on the eye-spys for issues.

Cameron

1 Like

It was a dodgy connector to my AS73 spectrometer chip! Thanks again for all your help Cam!