I have been struggling with the same issue myself for a while, but I think I have a good idea how to fix this.
First, remove the PI from the casing
I know this is strange, but in my experience, this was the main issue. HDMI through the case was working fine with a desktop monitor, but not with the TV. I removed the PI from the case, and tried again, it worked right away. This is because some covers don't allow the mini HDMI cable to fully attach, and hence giving out a weaker signal through the HDMI cable.
If the first step didn't work, we still have a few options. I would list them here in order, so you can try them gradually.
Increase the outgoing signal
You can do that with the config_hdmi_boost=4
config property in /boot/config.txt
, the maximum value that you can set for this option is 11
, however, the documentation advises against using such a high power boost unnecessarily.
Force outputting HDMI
By using the property force_hotplug=1
. Usually this option is already configured for you under /boot/config.txt
. It forces the HDMI output even if the monitor was not detected as HDMI-ready.
Increase HDMI compatibility by running in "safe mode"
By using the option hdmi_safe=1
in /boot/config.txt
. This runs the HDMI video output in a 'highly compatible' mode. It also changes the resolution to 640X480
, but don't worry, we can change it later.
Manually configure the resolution and output mode
Under the HDMI specification, the monitor can 'negotiate' with the attached device, which resolutions and video modes it supports and which it 'prefers'. This is the so-called edid
information. The PI should then be able to choose the correct resolution and mode to be outputted. However, this could be problematic in some cases, and it might be better to 'force' output a resolution and a mode if we already know it.
In short, you need to ssh
into the RaspberryPi while it is connected to the monitor/tv, and using the commands tvservice -d /tmp/edid
and edidparser /tmp/edid
to figure out the preferred resolution and mode. You can then set these values using the properties hdmi_group
and hdmi_mode
in the /boot/config.txt
file. You might also need to set the property hdmi_ignore_edid=0xa5000080
to ignore the edid
negotiation. Here's a nice tutorial on how to do this.
Remember, you can always take a look at the documentation to understand better what each of these configuration parameters does
sudo apt update; sudo dist-upgrade -y; sudo reboot
to get the latest Raspbian fixes.wpa_supplicant.conf
and a blankssh.txt
in the /boot folder (you can do that on windows - as long as you ignore any prompts that encourage you to reformat the filesystem). Boot that and you can ssh in to your RPi (you may need to scan your network or look at your router's config pages to find the IP address). Then you can run those commands to see what's going wrong.