<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iot &#8211; About Things | A Hans Scharler Blog</title>
	<atom:link href="https://nothans.com/tag/iot/feed" rel="self" type="application/rss+xml" />
	<link>https://nothans.com</link>
	<description>Life, Comedy, Games, Tech, Marketing, and Community</description>
	<lastBuildDate>Tue, 01 Sep 2026 16:23:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/nothans.com/wp-content/uploads/2023/02/cropped-settings.png?fit=32%2C32&#038;ssl=1</url>
	<title>iot &#8211; About Things | A Hans Scharler Blog</title>
	<link>https://nothans.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">114568856</site>	<item>
		<title>CABLE 82 TV Channel Build Tutorial (Rasbperry Pi 3 B+ and Old CRT TV)</title>
		<link>https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv</link>
					<comments>https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Mon, 24 Aug 2026 19:40:30 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[CABLE 82]]></category>
		<category><![CDATA[CRT]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=5604</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Last month I published&nbsp;<a href="https://nothans.com/cable-82-turn-a-raspberry-pi-and-an-old-crt-into-a-1982-cable-bulletin-board-channel">CABLE 82</a>, a recreation of the 1982 cable community bulletin board channel that runs on a Raspberry Pi and an old CRT. That post covered the software and the shape of the hardware. Then a reader with a Pi 3 B+ hit &#8220;localhost refused to connect,&#8221; we went back and forth in the comments, and I realized I had never written down the whole build. I will take you from a blank SD card to a glowing tube.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="750" height="600" data-attachment-id="5682" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/image-148" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?fit=2000%2C1600&amp;ssl=1" data-orig-size="2000,1600" data-comments-opened="0" data-image-title="CABLE 82 Dialed In on a Magnavox TV from 1987" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?fit=750%2C600&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?resize=750%2C600&#038;ssl=1" alt="" class="wp-image-5682" style="width:540px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?resize=1024%2C819&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?resize=300%2C240&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?resize=768%2C614&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?resize=1536%2C1229&amp;ssl=1 1536w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?resize=750%2C600&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?resize=1320%2C1056&amp;ssl=1 1320w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?resize=80%2C64&amp;ssl=1 80w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/image-2.png?w=2000&amp;ssl=1 2000w" sizes="(max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">CABLE 82 Dialed In on a Magnavox TV from 1987</figcaption></figure>
</div>


<p class="wp-block-paragraph">The TV is a Magnavox portable from Facebook Marketplace, a Perfect View from August 1987, the kind with a handle on top, a rod antenna, and a 12V jack so you could watch it in the car.</p>


<div class="wp-block-image">
<figure class="aligncenter"><img data-recalc-dims="1" decoding="async" width="395" height="431" data-attachment-id="5658" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/magnavox-marketplace-listing-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/00-magnavox-marketplace-listing-1.jpg?fit=395%2C431&amp;ssl=1" data-orig-size="395,431" data-comments-opened="0" data-image-title="Magnavox marketplace listing" data-image-description="" data-image-caption="&lt;p&gt;The Marketplace listing: a black Magnavox portable CRT showing static&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/00-magnavox-marketplace-listing-1.jpg?fit=395%2C431&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/00-magnavox-marketplace-listing-1.jpg?resize=395%2C431&#038;ssl=1" alt="The Marketplace listing: a black Magnavox portable CRT showing static" class="wp-image-5658" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/00-magnavox-marketplace-listing-1.jpg?w=395&amp;ssl=1 395w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/00-magnavox-marketplace-listing-1.jpg?resize=275%2C300&amp;ssl=1 275w" sizes="(max-width: 395px) 100vw, 395px" /></figure>
</div>


<p class="wp-block-paragraph">The Pi is a 3 Model B+, the same board the reader had.</p>



<h2 id="the-false-start-the-original-2012-pi" class="wp-block-heading">The false start: the original 2012 Pi</h2>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img data-recalc-dims="1" decoding="async" width="697" height="544" data-attachment-id="5672" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/pi-model-b-and-debian6-sd-card-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/01-pi-model-b-and-debian6-sd-card-1.jpg?fit=697%2C544&amp;ssl=1" data-orig-size="697,544" data-comments-opened="0" data-image-title="Pi model b and debian6 sd card" data-image-description="" data-image-caption="&lt;p&gt;The original Raspberry Pi Model B from 2012 with the element14 &amp;#8220;Debian 6 for Linux&amp;#8221; SD card it shipped with&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/01-pi-model-b-and-debian6-sd-card-1.jpg?fit=697%2C544&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/01-pi-model-b-and-debian6-sd-card-1.jpg?resize=697%2C544&#038;ssl=1" alt="The original Raspberry Pi Model B from 2012 with the element14 &quot;Debian 6 for Linux&quot; SD card it shipped with" class="wp-image-5672" style="width:523px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/01-pi-model-b-and-debian6-sd-card-1.jpg?w=697&amp;ssl=1 697w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/01-pi-model-b-and-debian6-sd-card-1.jpg?resize=300%2C234&amp;ssl=1 300w" sizes="(max-width: 697px) 100vw, 697px" /></figure>
</div>


<p class="wp-block-paragraph">My first instinct was to do this on the least capable Pi in the house: the original Model B, board marked &#8220;(c)2011.12&#8221;, with the 4GB &#8220;Debian 6 for Linux&#8221; card it came with. Raspberry Pi OS still supports it, which is remarkable for a 2012 computer, and Node.js 20 installs from&nbsp;<code>apt</code>. The server half of CABLE 82 would run fine.</p>



<p class="wp-block-paragraph">The TV half would not. The original Pi&#8217;s chip is ARMv6, and no current browser runs on it. Raspberry Pi dropped Chromium for ARMv6 in 2023; on the current OS it prints &#8220;This hardware doesn&#8217;t support NEON SIMD extensions&#8221; and quits. Firefox is built for ARMv7 and dies the same way. The one engine left is WebKit, with no JavaScript JIT, on a 700MHz core. I looked at that path for a while&#8230; and decided the tutorial should be about the channel, not about heroics.</p>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="728" height="509" data-attachment-id="5657" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/pi-3b-plus-and-16gb-microsd-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/02-pi-3b-plus-and-16gb-microsd-1.jpg?fit=728%2C509&amp;ssl=1" data-orig-size="728,509" data-comments-opened="0" data-image-title="Pi 3b plus and 16gb microsd" data-image-description="" data-image-caption="&lt;p&gt;The Raspberry Pi 3 Model B+ in its clear case, heatsinks on, with the 16GB microSD card that is about to become a TV channel&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/02-pi-3b-plus-and-16gb-microsd-1.jpg?fit=728%2C509&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/02-pi-3b-plus-and-16gb-microsd-1.jpg?resize=728%2C509&#038;ssl=1" alt="The Raspberry Pi 3 Model B+ in its clear case, heatsinks on, with the 16GB microSD card that is about to become a TV channel" class="wp-image-5657" style="width:484px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/02-pi-3b-plus-and-16gb-microsd-1.jpg?w=728&amp;ssl=1 728w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/02-pi-3b-plus-and-16gb-microsd-1.jpg?resize=300%2C210&amp;ssl=1 300w" sizes="auto, (max-width: 728px) 100vw, 728px" /></figure>
</div>


<h2 id="what-you-need" class="wp-block-heading">What you need</h2>



<ul class="wp-block-list">
<li>Raspberry Pi 3 Model B+&nbsp;(or any Pi 2 or newer; a Pi 4 is a fine choice too).</li>



<li>16GB or larger microSD card.&nbsp;Mine is a SanDisk Ultra PLUS 16GB.</li>



<li>Micro-USB power supply, 5V at 2.5A. The 3 B+ is the last micro-USB Pi.</li>



<li>A network connection<strong>.</strong>&nbsp;Ethernet is simplest for the first boot; the 3 B+ also has Wi-Fi.</li>



<li>4:3 CRT with a coax antenna input.&nbsp;Almost every tube TV has one, which is why this is the path that works for everybody. Mine has nothing else: one F connector marked EXT ANT and a switch to pick it over the built-in rod antenna.</li>



<li><a href="https://www.amazon.com/dp/B0DRCZKLBQ?tag=nothans">HDMI-to-RF modulator</a>, the little box that turns HDMI into channel 3 or 4 on the antenna input, plus a short coax cable. Mine is an &#8220;HDM61&#8221; unit; the same design is sold under a dozen brand names.</li>



<li>Another computer to flash the card and to SSH into the Pi (needs to be on the same network as the Raspberry Pi).</li>
</ul>



<h2 id="step-1-put-the-os-on-the-card" class="wp-block-heading">Step 1: Put the OS on the card</h2>



<h3 id="which-image-and-why" class="wp-block-heading">Which image, and why</h3>



<p class="wp-block-paragraph"><strong>Raspberry Pi OS (64-bit), the desktop edition.</strong>&nbsp;It is the image Raspberry Pi&#8217;s own kiosk tutorial tells you to use, and there are two practical reasons to follow that advice on a 3 B+:</p>



<ol class="wp-block-list">
<li>Chromium is the browser that will show the channel, and the 64-bit build is the one that has been solid on Pi 3 boards (the 32-bit build had a will-not-start bug on the Pi 3 as recently as this summer).</li>



<li>Node.js 22 from NodeSource is 64-bit only now; their installer refuses 32-bit outright.</li>
</ol>



<p class="wp-block-paragraph">The image is a 1.3GB download and takes about 6GB on the card, so 16GB leaves plenty of room.</p>



<h3 id="flash-it-with-raspberry-pi-imager" class="wp-block-heading">Flash it with Raspberry Pi Imager</h3>



<p class="wp-block-paragraph">Raspberry Pi Imager is the right tool here, and not balenaEtcher or&nbsp;<code>dd</code>, because it can bake the hostname, your user, and SSH into the card before the Pi ever boots. That is what makes the headless setup work. Install it from&nbsp;<a href="https://www.raspberrypi.com/software/">raspberrypi.com/software</a>, put the card in your computer, and walk the steps down the left side.</p>



<p class="wp-block-paragraph"><strong>Device: Raspberry Pi 3.</strong>&nbsp;This filters the OS list to images that run on the 3 family (A+, B, B+, and Compute Module 3).</p>


<div class="wp-block-image">
<figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="682" height="482" data-attachment-id="5656" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/imager-device-raspberry-pi-3-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/03-imager-device-raspberry-pi-3-1.jpg?fit=682%2C482&amp;ssl=1" data-orig-size="682,482" data-comments-opened="0" data-image-title="Imager device raspberry pi 3" data-image-description="" data-image-caption="&lt;p&gt;Raspberry Pi Imager 2.0, Device step, with Raspberry Pi 3 selected&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/03-imager-device-raspberry-pi-3-1.jpg?fit=682%2C482&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/03-imager-device-raspberry-pi-3-1.jpg?resize=682%2C482&#038;ssl=1" alt="Raspberry Pi Imager 2.0, Device step, with Raspberry Pi 3 selected" class="wp-image-5656" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/03-imager-device-raspberry-pi-3-1.jpg?w=682&amp;ssl=1 682w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/03-imager-device-raspberry-pi-3-1.jpg?resize=300%2C212&amp;ssl=1 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>OS: Raspberry Pi OS (64-bit).</strong>&nbsp;The top entry, marked Recommended. Not the 32-bit one and not the &#8220;Legacy&#8221; one; Legacy is the older Bookworm release.</p>


<div class="wp-block-image">
<figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="682" height="482" data-attachment-id="5659" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/imager-os-raspberry-pi-os-64-bit-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/04-imager-os-raspberry-pi-os-64-bit-1.jpg?fit=682%2C482&amp;ssl=1" data-orig-size="682,482" data-comments-opened="0" data-image-title="Imager os raspberry pi os 64 bit" data-image-description="" data-image-caption="&lt;p&gt;Imager OS step: Raspberry Pi OS (64-bit), a port of Debian Trixie with the Raspberry Pi Desktop, released 2026-06-18&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/04-imager-os-raspberry-pi-os-64-bit-1.jpg?fit=682%2C482&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/04-imager-os-raspberry-pi-os-64-bit-1.jpg?resize=682%2C482&#038;ssl=1" alt="Imager OS step: Raspberry Pi OS (64-bit), a port of Debian Trixie with the Raspberry Pi Desktop, released 2026-06-18" class="wp-image-5659" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/04-imager-os-raspberry-pi-os-64-bit-1.jpg?w=682&amp;ssl=1 682w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/04-imager-os-raspberry-pi-os-64-bit-1.jpg?resize=300%2C212&amp;ssl=1 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>Storage: the SD card.</strong>&nbsp;Imager hides your system drives by default, so the only thing in the list should be the card. Mine shows up as a 14.8GB &#8220;Generic MassStorageClass USB Device&#8221; because it is in a USB reader; a 16GB card really is about 14.8GB once you count the way computers count.</p>


<div class="wp-block-image">
<figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="682" height="482" data-attachment-id="5662" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/imager-storage-16gb-card-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/05-imager-storage-16gb-card-1.jpg?fit=682%2C482&amp;ssl=1" data-orig-size="682,482" data-comments-opened="0" data-image-title="Imager storage 16gb card" data-image-description="" data-image-caption="&lt;p&gt;Imager Storage step showing the 14.8GB USB card reader mounted as I:\&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/05-imager-storage-16gb-card-1.jpg?fit=682%2C482&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/05-imager-storage-16gb-card-1.jpg?resize=682%2C482&#038;ssl=1" alt="Imager Storage step showing the 14.8GB USB card reader mounted as I:\" class="wp-image-5662" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/05-imager-storage-16gb-card-1.jpg?w=682&amp;ssl=1 682w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/05-imager-storage-16gb-card-1.jpg?resize=300%2C212&amp;ssl=1 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>Customisation.</strong>&nbsp;This is the part Etcher cannot do, and the reason the Pi will come up on the network with no screen attached.</p>



<ul class="wp-block-list">
<li><strong>Hostname:</strong>&nbsp;<code>cable82</code>. That gives you&nbsp;<code>cable82.local</code>&nbsp;later, so you never have to go looking for an IP address.</li>



<li><strong>Localisation:</strong>&nbsp;your time zone and keyboard layout. The clock on the channel runs off the Pi&#8217;s time zone, so get this right.</li>



<li><strong>User:</strong>&nbsp;a username and password you will remember. You will type them into SSH in a few minutes.</li>



<li><strong>Wi-Fi:</strong>&nbsp;your network name and password. I set it even though the Pi would be on Ethernet for the build; it means the finished TV can live anywhere in the house.</li>



<li><strong>Remote access:</strong>&nbsp;<strong>enable SSH</strong>, password authentication. I also left Raspberry Pi Connect on, which gives you a browser-based remote shell to the Pi from anywhere, handy for a TV that lives in a corner.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="682" height="482" data-attachment-id="5660" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/imager-hostname-cable82-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/06-imager-hostname-cable82-1.jpg?fit=682%2C482&amp;ssl=1" data-orig-size="682,482" data-comments-opened="0" data-image-title="Imager hostname cable82" data-image-description="" data-image-caption="&lt;p&gt;Imager Customisation: hostname set to cable82&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/06-imager-hostname-cable82-1.jpg?fit=682%2C482&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/06-imager-hostname-cable82-1.jpg?resize=682%2C482&#038;ssl=1" alt="Imager Customisation: hostname set to cable82" class="wp-image-5660" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/06-imager-hostname-cable82-1.jpg?w=682&amp;ssl=1 682w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/06-imager-hostname-cable82-1.jpg?resize=300%2C212&amp;ssl=1 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="682" height="482" data-attachment-id="5663" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/imager-ssh-enabled-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/07-imager-ssh-enabled-1.jpg?fit=682%2C482&amp;ssl=1" data-orig-size="682,482" data-comments-opened="0" data-image-title="Imager ssh enabled" data-image-description="" data-image-caption="&lt;p&gt;Imager Customisation, Remote access: Enable SSH on, password authentication&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/07-imager-ssh-enabled-1.jpg?fit=682%2C482&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/07-imager-ssh-enabled-1.jpg?resize=682%2C482&#038;ssl=1" alt="Imager Customisation, Remote access: Enable SSH on, password authentication" class="wp-image-5663" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/07-imager-ssh-enabled-1.jpg?w=682&amp;ssl=1 682w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/07-imager-ssh-enabled-1.jpg?resize=300%2C212&amp;ssl=1 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>


<p class="wp-block-paragraph">Then&nbsp;<strong>Write</strong>. Imager asks once more whether it can erase the card, downloads the image, writes it, and verifies it. The write was the slow part: this card takes data at about 10MB/s, so the 6GB image plus verification took about fifteen minutes.</p>


<div class="wp-block-image">
<figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="682" height="482" data-attachment-id="5661" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/imager-writing-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/08-imager-writing-1.jpg?fit=682%2C482&amp;ssl=1" data-orig-size="682,482" data-comments-opened="0" data-image-title="Imager writing" data-image-description="" data-image-caption="&lt;p&gt;Imager, write in progress at 9MB/s&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/08-imager-writing-1.jpg?fit=682%2C482&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/08-imager-writing-1.jpg?resize=682%2C482&#038;ssl=1" alt="Imager, write in progress at 9MB/s" class="wp-image-5661" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/08-imager-writing-1.jpg?w=682&amp;ssl=1 682w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/08-imager-writing-1.jpg?resize=300%2C212&amp;ssl=1 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="682" height="482" data-attachment-id="5664" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/imager-write-complete-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/11-imager-write-complete-1.jpg?fit=682%2C482&amp;ssl=1" data-orig-size="682,482" data-comments-opened="0" data-image-title="Imager write complete" data-image-description="" data-image-caption="&lt;p&gt;Imager, write complete, with the list of customisations applied&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/11-imager-write-complete-1.jpg?fit=682%2C482&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/11-imager-write-complete-1.jpg?resize=682%2C482&#038;ssl=1" alt="Imager, write complete, with the list of customisations applied" class="wp-image-5664" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/11-imager-write-complete-1.jpg?w=682&amp;ssl=1 682w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/11-imager-write-complete-1.jpg?resize=300%2C212&amp;ssl=1 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>


<h3 id="first-boot" class="wp-block-heading">First boot</h3>



<p class="wp-block-paragraph">Imager ejects the card when it is done. Card into the Pi, Ethernet in, power in. The green light flickers for a while: the first boot resizes the filesystem to fill the card, generates SSH keys, and runs a one-time setup pass. Mine answered on the network in well under two minutes. Then from your computer:</p>



<pre class="wp-block-code"><code>ssh yourname@cable82.local</code></pre>



<p class="wp-block-paragraph">(If&nbsp;<code>.local</code>&nbsp;does not resolve on your machine, your router&#8217;s device list will show a&nbsp;<code>cable82</code>&nbsp;with an IP address; SSH to that instead.)</p>



<p class="wp-block-paragraph">Three things to check while you are in:</p>



<pre class="wp-block-code"><code>head -2 /etc/os-release
free -m
df -h /</code></pre>



<p class="wp-block-paragraph">Mine came back Debian 13 (trixie), 905MB of memory with about 570MB available, and a 15GB root partition with 8.4GB free after the 6GB image. The Pi had been up eight minutes by the time I got around to asking. Then bring the image current:</p>



<pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt full-upgrade -y</code></pre>



<p class="wp-block-paragraph">(<code>sudo</code>&nbsp;asks for your password; recent Raspberry Pi OS releases turned off passwordless sudo by default.)</p>



<p class="wp-block-paragraph">The Pi is on the network, current, and answering SSH.</p>



<h2 id="step-2-nodejs" class="wp-block-heading">Step 2: Node.js</h2>



<p class="wp-block-paragraph">CABLE 82 is a Node.js app with no dependencies, so Node is the only thing to install. It needs Node 18 or newer, and a fresh Raspberry Pi OS has none at all:</p>



<pre class="wp-block-code"><code>$ node -v
bash: node: command not found</code></pre>



<p class="wp-block-paragraph">That line, by the way, is almost certainly what was behind the reader&#8217;s &#8220;localhost refused to connect.&#8221; No Node, no server, nothing listening, and the browser reports it as a refused connection.</p>



<p class="wp-block-paragraph">Two ways to get Node on a 64-bit Pi. The quick one is the distro&#8217;s own package,&nbsp;<code>sudo apt install nodejs</code>, which gives you Node 20. I went with NodeSource for Node 22, the current long-term-support line, and it is two commands:</p>



<pre class="wp-block-code"><code>curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
node -v</code></pre>



<p class="wp-block-paragraph">Mine printed&nbsp;<code>v22.23.2</code>. (NodeSource only builds for 64-bit now; if you flashed the 32-bit image, use the&nbsp;<code>apt</code>&nbsp;route.)</p>



<h2 id="step-3-cable-82-on-the-air" class="wp-block-heading">Step 3: CABLE 82 on the air</h2>



<p class="wp-block-paragraph">With Node in place, the channel itself is next. Clone it and start it:</p>



<pre class="wp-block-code"><code>cd ~
git clone https://github.com/nothans/cable-82
cd cable-82
node server.js</code></pre>



<p class="wp-block-paragraph">It prints every address it answers on:</p>



<pre class="wp-block-code"><code>CABLE 82 broadcasting
  http://localhost:1982   (a browser on this machine)
  http://192.168.68.93:1982   (a browser on another device on your network)
Control room: http://localhost:1982/config</code></pre>



<p class="wp-block-paragraph">Read that second line carefully, because it is the other half of the reader&#8217;s problem.&nbsp;<code>localhost</code>&nbsp;means &#8220;this machine.&#8221; Typed into a browser on your laptop, it asks the laptop for a channel it does not have. The&nbsp;<code>192.168.x.x</code>&nbsp;address is the Pi as seen from everywhere else on your network, and that is the one to open from the laptop. I did, and the channel was there: blue screen, the clock, the crawl.</p>



<figure class="wp-block-image"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="563" data-attachment-id="5673" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/channel-from-laptop-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/12-channel-from-laptop-1.jpg?fit=1024%2C768&amp;ssl=1" data-orig-size="1024,768" data-comments-opened="0" data-image-title="Channel from laptop" data-image-description="" data-image-caption="&lt;p&gt;The channel from a browser on the laptop: blue clock page, LATEST crawl&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/12-channel-from-laptop-1.jpg?fit=750%2C563&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/12-channel-from-laptop-1.jpg?resize=750%2C563&#038;ssl=1" alt="The channel from a browser on the laptop: blue clock page, LATEST crawl" class="wp-image-5673" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/12-channel-from-laptop-1.jpg?w=1024&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/12-channel-from-laptop-1.jpg?resize=300%2C225&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/12-channel-from-laptop-1.jpg?resize=768%2C576&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/12-channel-from-laptop-1.jpg?resize=750%2C563&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/12-channel-from-laptop-1.jpg?resize=500%2C375&amp;ssl=1 500w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/12-channel-from-laptop-1.jpg?resize=100%2C75&amp;ssl=1 100w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<p class="wp-block-paragraph">The first run also writes a&nbsp;<code>config.json</code>&nbsp;next to the server, which is where everything you change in the control room ends up. Open&nbsp;<code>http://192.168.68.93:1982/config</code>&nbsp;from the laptop and make it yours: channel name, your messages, your feeds, your town for the weather. Save, and the channel picks it up within about twenty seconds.</p>



<figure class="wp-block-image"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="563" data-attachment-id="5674" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/control-room-from-laptop-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/13-control-room-from-laptop-1.jpg?fit=1024%2C768&amp;ssl=1" data-orig-size="1024,768" data-comments-opened="0" data-image-title="Control room from laptop" data-image-description="" data-image-caption="&lt;p&gt;The control room from the laptop: the whole channel in one screen&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/13-control-room-from-laptop-1.jpg?fit=750%2C563&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/13-control-room-from-laptop-1.jpg?resize=750%2C563&#038;ssl=1" alt="The control room from the laptop: the whole channel in one screen" class="wp-image-5674" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/13-control-room-from-laptop-1.jpg?w=1024&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/13-control-room-from-laptop-1.jpg?resize=300%2C225&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/13-control-room-from-laptop-1.jpg?resize=768%2C576&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/13-control-room-from-laptop-1.jpg?resize=750%2C563&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/13-control-room-from-laptop-1.jpg?resize=500%2C375&amp;ssl=1 500w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/13-control-room-from-laptop-1.jpg?resize=100%2C75&amp;ssl=1 100w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<h3 id="make-it-a-service" class="wp-block-heading">Make it a service</h3>



<p class="wp-block-paragraph">Ctrl-C the server and hand it to systemd so it runs at boot and restarts if it ever dies. Create&nbsp;<code>/etc/systemd/system/cable82.service</code>:</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=CABLE 82
After=network-online.target

&#91;Service]
ExecStart=/usr/bin/node /home/cable82/cable-82/server.js
Restart=always
User=cable82

&#91;Install]
WantedBy=multi-user.target</code></pre>



<p class="wp-block-paragraph">Both&nbsp;<code>cable82</code>s are my username; use yours (<code>whoami</code>&nbsp;tells you, and&nbsp;<code>which node</code>&nbsp;confirms the path on the&nbsp;<code>ExecStart</code>&nbsp;line). Then:</p>



<pre class="wp-block-code"><code>sudo systemctl enable --now cable82
systemctl status cable82</code></pre>



<p class="wp-block-paragraph"><code>active (running)</code>&nbsp;with the broadcasting lines in its log, and&nbsp;<code>sudo journalctl -u cable82 -f</code>&nbsp;is where to look if anything is ever wrong. The server sits at about 46MB of memory.</p>



<h2 id="step-4-chromium-in-kiosk-mode" class="wp-block-heading">Step 4: Chromium in kiosk mode</h2>



<p class="wp-block-paragraph">The desktop image already logs in automatically and starts a Wayland session (the compositor is called labwc; the old LXDE desktop from earlier Pi OS releases is gone). Chromium 151 is preinstalled. All we have to do is tell the session to open Chromium full screen on the channel at login.</p>



<p class="wp-block-paragraph">The file for that is&nbsp;<code>~/.config/labwc/autostart</code>. Create it with these lines:</p>



<pre class="wp-block-code"><code># CABLE 82 kiosk: wait for the channel server, then put Chromium on it full screen.
until curl -s -o /dev/null http://localhost:1982; do sleep 1; done
/usr/bin/lwrespawn /usr/bin/chromium http://localhost:1982   --kiosk --noerrdialogs --disable-infobars --no-first-run --no-memcheck   --disable-lcd-text --autoplay-policy=no-user-gesture-required   --enable-features=OverlayScrollbar --password-store=basic --start-maximized &amp;</code></pre>



<p class="wp-block-paragraph">A few of those deserve a word:</p>



<ul class="wp-block-list">
<li>The&nbsp;<code>until curl</code>&nbsp;loop waits for the server to answer before launching the browser. Without it, Chromium can win the race at boot and show &#8220;localhost refused to connect&#8221; on the TV, and nothing ever tells it to try again.</li>



<li><code>lwrespawn</code>&nbsp;is a Raspberry Pi helper that restarts a program if it dies, so a crash brings the channel back instead of leaving a blank desktop.</li>



<li><code>--no-memcheck</code>&nbsp;stops Chromium from popping a low-memory warning over the channel on a 1GB board.</li>



<li><code>--autoplay-policy=no-user-gesture-required</code>&nbsp;lets the background music start without anyone clicking.</li>



<li><code>--disable-lcd-text</code>&nbsp;turns off subpixel font smoothing so the chunky text stays crisp white instead of going pink at the edges.</li>



<li><code>--password-store=basic</code>&nbsp;keeps the desktop keyring from asking for a password at login.</li>
</ul>



<p class="wp-block-paragraph">Then turn off screen blanking, or the TV goes dark after ten minutes:</p>



<pre class="wp-block-code"><code>sudo raspi-config nonint do_blanking 1</code></pre>



<p class="wp-block-paragraph">(Or interactively:&nbsp;<code>sudo raspi-config</code>&nbsp;&gt; Display Options &gt; Screen Blanking &gt; No.)</p>



<p class="wp-block-paragraph">If you are here from the original post: the&nbsp;<code>chromium-browser --kiosk</code>&nbsp;line and the&nbsp;<code>/etc/xdg/lxsession/LXDE-pi/autostart</code>&nbsp;file in that post were for the previous Pi OS release. On Trixie the binary is&nbsp;<code>chromium</code>&nbsp;and the file is the labwc one above.</p>



<p class="wp-block-paragraph">Reboot. About a minute later Chromium was running full screen on the channel. I could tell from the laptop before the TV was even connected:</p>



<pre class="wp-block-code"><code>$ pgrep -a chromium | head -1
1407 /usr/lib/chromium/chromium ... --kiosk ... http://localhost:1982</code></pre>



<h3 id="check-the-power-supply-while-you-are-here" class="wp-block-heading">Check the power supply while you are here</h3>



<p class="wp-block-paragraph">This section wasn&#8217;t what I expected. My first run was off a phone charger&#8230;</p>



<pre class="wp-block-code"><code>$ vcgencmd get_throttled
throttled=0xd0005
$ vcgencmd measure_clock arm
frequency(48)=600064000</code></pre>



<p class="wp-block-paragraph">Any bit set in&nbsp;<code>get_throttled</code>&nbsp;is a complaint;&nbsp;<code>0x5</code>&nbsp;means under-voltage and throttling right now, and the clock line shows a 1.4GHz Pi running at 600MHz. It worked, in the sense that the channel was on, but at less than half speed. With a proper 5V 2.5A supply the under-voltage bits cleared and the clock came back up. If you only run one check from this whole post on an existing Pi, run that one.</p>



<p class="wp-block-paragraph">(On a 3 B+ you may still see&nbsp;<code>0x80008</code>&nbsp;with a 1.2GHz clock: that is the board&#8217;s own soft temperature limit at 60C, normal with Chromium running, and nothing to do with power.)</p>



<h2 id="step-5-the-crt" class="wp-block-heading">Step 5: The CRT</h2>



<p class="wp-block-paragraph"><em>Note on photos of the TV&#8230; it turns out to be surprisingly hard to get a good photo of the screen. My phone didn&#8217;t capture it well. Also, the screen had a giant smudge backed into the acrylic covering the TV. I had to use Novus 2 polish to clean up the smudge and scratches. I assure you that it looks better in person&#8230;</em></p>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="996" data-attachment-id="5671" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/first-picture-on-the-magnavox-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?fit=1928%2C2560&amp;ssl=1" data-orig-size="1928,2560" data-comments-opened="0" data-image-title="First picture on the magnavox" data-image-description="" data-image-caption="&lt;p&gt;The first picture: CABLE 82 on the Magnavox over channel 3, fuzzy, red page, no sound yet&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?fit=750%2C996&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?resize=750%2C996&#038;ssl=1" alt="The first picture: CABLE 82 on the Magnavox over channel 3, fuzzy, red page, no sound yet" class="wp-image-5671" style="width:316px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?w=1928&amp;ssl=1 1928w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?resize=226%2C300&amp;ssl=1 226w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?resize=771%2C1024&amp;ssl=1 771w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?resize=768%2C1020&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?resize=1157%2C1536&amp;ssl=1 1157w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?resize=1542%2C2048&amp;ssl=1 1542w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?resize=750%2C996&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/14-first-picture-on-the-magnavox-1-scaled.jpg?resize=1320%2C1753&amp;ssl=1 1320w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>


<p class="wp-block-paragraph">The Magnavox has exactly one way in: an F connector marked EXT ANT.</p>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="403" height="547" data-attachment-id="5665" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/magnavox-back-panel-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/09-magnavox-back-panel-1.jpg?fit=403%2C547&amp;ssl=1" data-orig-size="403,547" data-comments-opened="0" data-image-title="Magnavox back panel" data-image-description="" data-image-caption="&lt;p&gt;The back of the Magnavox: one EXT ANT jack and a switch to choose it over the rod antenna&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/09-magnavox-back-panel-1.jpg?fit=403%2C547&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/09-magnavox-back-panel-1.jpg?resize=403%2C547&#038;ssl=1" alt="The back of the Magnavox: one EXT ANT jack and a switch to choose it over the rod antenna" class="wp-image-5665" style="width:293px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/09-magnavox-back-panel-1.jpg?w=403&amp;ssl=1 403w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/09-magnavox-back-panel-1.jpg?resize=221%2C300&amp;ssl=1 221w" sizes="auto, (max-width: 403px) 100vw, 403px" /></figure>
</div>


<p class="wp-block-paragraph">So the path is HDMI out of the Pi into a small&nbsp;<a href="https://www.amazon.com/dp/B0DRCZKLBQ?tag=nothans">HDMI-to-RF modulator</a>, coax from the modulator into the TV, and the TV tuned to channel 3. The box is the size of a cassette tape, takes USB power, has a CH3/CH4 switch, and its spec sheet says everything you need to know: NTSC out, 480p to 1080p in, sound on the 4.5MHz carrier (that means mono, the way 1982 did it).</p>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="730" data-attachment-id="5666" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/hdm61-modulator-specs-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/10-hdm61-modulator-specs-1.jpg?fit=1500%2C1459&amp;ssl=1" data-orig-size="1500,1459" data-comments-opened="0" data-image-title="Hdm61 modulator specs" data-image-description="" data-image-caption="&lt;p&gt;The modulator&amp;#8217;s spec table: NTSC, CH3/CH4, 480p-1080p in, sound system M = 4.5MHz&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/10-hdm61-modulator-specs-1.jpg?fit=750%2C729&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/10-hdm61-modulator-specs-1.jpg?resize=750%2C730&#038;ssl=1" alt="The modulator's spec table: NTSC, CH3/CH4, 480p-1080p in, sound system M = 4.5MHz" class="wp-image-5666" style="aspect-ratio:1.0281124497991967;width:447px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/10-hdm61-modulator-specs-1.jpg?w=1500&amp;ssl=1 1500w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/10-hdm61-modulator-specs-1.jpg?resize=300%2C292&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/10-hdm61-modulator-specs-1.jpg?resize=1024%2C996&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/10-hdm61-modulator-specs-1.jpg?resize=768%2C747&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/10-hdm61-modulator-specs-1.jpg?resize=750%2C730&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/10-hdm61-modulator-specs-1.jpg?resize=1320%2C1284&amp;ssl=1 1320w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="996" data-attachment-id="5670" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/modulator-and-tv-clock-page-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?fit=1928%2C2560&amp;ssl=1" data-orig-size="1928,2560" data-comments-opened="0" data-image-title="Modulator and tv clock page" data-image-description="" data-image-caption="&lt;p&gt;The HDMI-to-RF modulator and the TV, clock page on screen&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?fit=750%2C996&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?resize=750%2C996&#038;ssl=1" alt="The HDMI-to-RF modulator and the TV, clock page on screen" class="wp-image-5670" style="width:408px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?w=1928&amp;ssl=1 1928w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?resize=226%2C300&amp;ssl=1 226w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?resize=771%2C1024&amp;ssl=1 771w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?resize=768%2C1020&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?resize=1157%2C1536&amp;ssl=1 1157w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?resize=1542%2C2048&amp;ssl=1 1542w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?resize=750%2C996&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/15-modulator-and-tv-clock-page-1-scaled.jpg?resize=1320%2C1753&amp;ssl=1 1320w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>


<p class="wp-block-paragraph">Plug it all in and the channel was on the tube.</p>



<h3 id="send-it-a-43-picture" class="wp-block-heading">Send it a 4:3 picture</h3>



<p class="wp-block-paragraph">The box scales whatever it gets to fill the 4:3 tube. CABLE 82 draws a 4:3 stage, so if the Pi sends a widescreen mode, the stage gets squashed. The Pi has to output 640&#215;480. On current Raspberry Pi OS the old&nbsp;<code>hdmi_group</code>&nbsp;and&nbsp;<code>hdmi_mode</code>&nbsp;lines in&nbsp;<code>config.txt</code>&nbsp;are dead; the kernel takes its orders from&nbsp;<code>cmdline.txt</code>, and the desktop then picks its own mode on top of that. So it takes two small files.</p>



<p class="wp-block-paragraph">Append to the end of the single long line in&nbsp;<code>/boot/firmware/cmdline.txt</code>:</p>



<pre class="wp-block-code"><code>video=HDMI-A-1:640x480@60D vc4.force_hotplug=1</code></pre>



<p class="wp-block-paragraph">The&nbsp;<code>D</code>&nbsp;forces the output on even when nothing answers, and&nbsp;<code>force_hotplug</code>&nbsp;keeps it on if the modulator never raises the hotplug pin (mine does not). Then pin the desktop to the same mode in&nbsp;<code>~/.config/kanshi/config</code>:</p>



<pre class="wp-block-code"><code>profile crt {
  output HDMI-A-1 mode 640x480 position 0,0
}</code></pre>



<p class="wp-block-paragraph">Without that second file, the desktop on my Pi happily chose 1024&#215;768 on top of the kernel&#8217;s 640&#215;480.</p>



<h3 id="give-it-an-edid-so-there-is-sound" class="wp-block-heading">Give it an EDID, so there is sound</h3>



<p class="wp-block-paragraph">The first picture had no audio, and the reason is a good one: cheap modulators send no EDID, the little data block a screen uses to introduce itself. No EDID means the Pi does not know the &#8220;screen&#8221; can hear, and it refuses to send HDMI audio at all. So I made it one. The CABLE 82 <a href="https://github.com/nothans/cable-82">repo</a> now ships a 256-byte EDID that describes a 640&#215;480 4:3 screen with stereo audio (<code>edid/cable82-640x480-audio.bin</code>, with the script that generates it). Hand it to the kernel:</p>



<pre class="wp-block-code"><code>sudo mkdir -p /lib/firmware/edid
sudo cp ~/cable-82/edid/cable82-640x480-audio.bin /lib/firmware/edid/cable82.bin</code></pre>



<p class="wp-block-paragraph">and add one more parameter to that same&nbsp;<code>cmdline.txt</code>&nbsp;line:</p>



<pre class="wp-block-code"><code>drm.edid_firmware=HDMI-A-1:edid/cable82.bin</code></pre>



<p class="wp-block-paragraph">Reboot.&nbsp;<code>wpctl status</code>&nbsp;now lists an HDMI sink next to the headphone jack; make it the default and give it some level (WirePlumber remembers):</p>



<pre class="wp-block-code"><code>wpctl status                       # find the "(HDMI)" sink's number
wpctl set-default &lt;number&gt;
wpctl set-volume &lt;number&gt; 0.8</code></pre>



<p class="wp-block-paragraph">The channel&#8217;s music came out of the Magnavox&#8217;s speaker on the next page turn.</p>



<h3 id="hide-the-cursor" class="wp-block-heading">Hide the cursor</h3>



<p class="wp-block-paragraph">A mouse pointer sat in the middle of the picture with no mouse attached. The HDMI CEC input counts as a pointer device, so the desktop draws one. The fix is a labwc keybinding that hides it, pressed automatically after boot. Copy&nbsp;<code>/etc/xdg/labwc/rc.xml</code>&nbsp;to&nbsp;<code>~/.config/labwc/rc.xml</code>, add inside&nbsp;<code>&lt;keyboard&gt;</code>:</p>



<pre class="wp-block-code"><code>&lt;keybind key="A-W-h"&gt;&lt;action name="HideCursor"/&gt;&lt;/keybind&gt;</code></pre>



<p class="wp-block-paragraph">then&nbsp;<code>sudo apt install wtype</code>&nbsp;and add to the end of&nbsp;<code>~/.config/labwc/autostart</code>:</p>



<pre class="wp-block-code"><code>(sleep 10; wtype -M alt -M logo -P h -p h -m logo -m alt) &amp;</code></pre>



<h3 id="the-detour-composite" class="wp-block-heading">The detour: composite</h3>



<p class="wp-block-paragraph">Before the HDMI modulator arrived I tried the other way in: the Pi&#8217;s 3.5mm AV jack, a 4-pole cable to yellow/red/white, and an old composite-to-RF adapter. On a Pi 3 that means&nbsp;<code>sudo raspi-config nonint do_composite 0</code>, which turns HDMI off; on every Pi before the 5 it is one or the other. The Wayland desktop also does not trust the composite connector until it is told the mode, so&nbsp;<code>video=Composite-1:720x480@60ie,tv_mode=NTSC</code>&nbsp;goes on the&nbsp;<code>cmdline.txt</code>&nbsp;line too.</p>



<h2 id="step-6-make-it-readable" class="wp-block-heading">Step 6: Make it readable</h2>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="996" data-attachment-id="5676" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/did-you-know-page-best-legibility-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?fit=1928%2C2560&amp;ssl=1" data-orig-size="1928,2560" data-comments-opened="0" data-image-title="Did you know page best legibility" data-image-description="" data-image-caption="&lt;p&gt;The DID YOU KNOW page, the most legible of the bunch before CRT mode&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?fit=750%2C996&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?resize=750%2C996&#038;ssl=1" alt="The DID YOU KNOW page, the most legible of the bunch before CRT mode" class="wp-image-5676" style="width:453px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?w=1928&amp;ssl=1 1928w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?resize=226%2C300&amp;ssl=1 226w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?resize=771%2C1024&amp;ssl=1 771w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?resize=768%2C1020&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?resize=1157%2C1536&amp;ssl=1 1157w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?resize=1542%2C2048&amp;ssl=1 1542w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?resize=750%2C996&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/16-did-you-know-page-best-legibility-1-scaled.jpg?resize=1320%2C1753&amp;ssl=1 1320w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>


<p class="wp-block-paragraph">With everything working, the verdict on a 9-inch 1987 tube over RF: the big clock and the crawl read fine, the small text was marginal, and the red and blue pages were worse than the cyan one. That is NTSC. It smears saturated color, it clips pure white (broadcast engineers kept white at 90% for a reason), and the hard drop shadow under every character turned into ringing.</p>



<p class="wp-block-paragraph">So I added a CRT set of settings in the control room for much older TVs&#8230;</p>



<figure class="wp-block-image"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="320" data-attachment-id="5669" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/control-room-crt-panel-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/20-control-room-crt-panel-1.jpg?fit=813%2C347&amp;ssl=1" data-orig-size="813,347" data-comments-opened="0" data-image-title="Control room crt panel" data-image-description="" data-image-caption="&lt;p&gt;The CRT panel: CRT mode, text size, and the overscan margin&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/20-control-room-crt-panel-1.jpg?fit=750%2C320&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/20-control-room-crt-panel-1.jpg?resize=750%2C320&#038;ssl=1" alt="The CRT panel: CRT mode, text size, and the overscan margin" class="wp-image-5669" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/20-control-room-crt-panel-1.jpg?w=813&amp;ssl=1 813w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/20-control-room-crt-panel-1.jpg?resize=300%2C128&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/20-control-room-crt-panel-1.jpg?resize=768%2C328&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/20-control-room-crt-panel-1.jpg?resize=750%2C320&amp;ssl=1 750w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<ul class="wp-block-list">
<li><strong>CRT mode</strong>&nbsp;swaps in a softer palette (less saturated backgrounds, 90% white) and drops the drop shadow.</li>



<li><strong>Text size</strong>&nbsp;enlarges the body text, kicker, crawl, and the small header lines, from 1 to 1.5x. I run 1.25 on this set; the big clock stays as it is.</li>



<li><strong>Overscan safe margin</strong>&nbsp;was already there; raise it if the TV crops the edges.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="480" data-attachment-id="5668" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/crt-mode-640x480-from-laptop-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/17-crt-mode-640x480-from-laptop-1.jpg?fit=640%2C480&amp;ssl=1" data-orig-size="640,480" data-comments-opened="0" data-image-title="Crt mode 640&amp;#215;480 from laptop" data-image-description="" data-image-caption="&lt;p&gt;CRT mode as the Pi renders it: softer blue, no shadow, text at 1.25x&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/17-crt-mode-640x480-from-laptop-1.jpg?fit=640%2C480&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/17-crt-mode-640x480-from-laptop-1.jpg?resize=640%2C480&#038;ssl=1" alt="CRT mode as the Pi renders it: softer blue, no shadow, text at 1.25x" class="wp-image-5668" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/17-crt-mode-640x480-from-laptop-1.jpg?w=640&amp;ssl=1 640w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/17-crt-mode-640x480-from-laptop-1.jpg?resize=300%2C225&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/17-crt-mode-640x480-from-laptop-1.jpg?resize=500%2C375&amp;ssl=1 500w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/17-crt-mode-640x480-from-laptop-1.jpg?resize=100%2C75&amp;ssl=1 100w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>


<p class="wp-block-paragraph">Turning text size up found one more thing: at 640&#215;480 the weather card no longer fit and its HI/LO line slid under the crawl.</p>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="996" data-attachment-id="5675" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/weather-page-crt-mode-cut-off-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?fit=1928%2C2560&amp;ssl=1" data-orig-size="1928,2560" data-comments-opened="0" data-image-title="Weather page crt mode cut off" data-image-description="" data-image-caption="&lt;p&gt;The weather page with the bottom line cut off&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?fit=750%2C996&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?resize=750%2C996&#038;ssl=1" alt="The weather page with the bottom line cut off" class="wp-image-5675" style="width:586px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?w=1928&amp;ssl=1 1928w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?resize=226%2C300&amp;ssl=1 226w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?resize=771%2C1024&amp;ssl=1 771w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?resize=768%2C1020&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?resize=1157%2C1536&amp;ssl=1 1157w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?resize=1542%2C2048&amp;ssl=1 1542w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?resize=750%2C996&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/18-weather-page-crt-mode-cut-off-1-scaled.jpg?resize=1320%2C1753&amp;ssl=1 1320w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>


<p class="wp-block-paragraph">So pages now fit themselves: if the content would overflow, the weather card gives up its sunrise/sunset line first, then shrinks just enough, and a long fact does the same.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="640" height="480" data-attachment-id="5650" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/weather-page-fit-640x480" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/19-weather-page-fit-640x480-1.jpg?fit=640%2C480&amp;ssl=1" data-orig-size="640,480" data-comments-opened="0" data-image-title="Weather page fit 640&amp;#215;480" data-image-description="" data-image-caption="&lt;p&gt;The weather page fitting the 640&amp;#215;480 frame after the fix&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/19-weather-page-fit-640x480-1.jpg?fit=640%2C480&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/19-weather-page-fit-640x480-1.jpg?resize=640%2C480&#038;ssl=1" alt="" class="wp-image-5650" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/19-weather-page-fit-640x480-1.jpg?w=640&amp;ssl=1 640w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/19-weather-page-fit-640x480-1.jpg?resize=300%2C225&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/19-weather-page-fit-640x480-1.jpg?resize=500%2C375&amp;ssl=1 500w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/19-weather-page-fit-640x480-1.jpg?resize=100%2C75&amp;ssl=1 100w" sizes="auto, (max-width: 640px) 100vw, 640px" /><figcaption class="wp-element-caption">The weather page fitting the 640&#215;480 frame after the fix</figcaption></figure>
</div>


<p class="wp-block-paragraph">All of that is in the repo as of this post.</p>



<h2 id="what-changed-because-of-this-build" class="wp-block-heading">What changed because of this build</h2>



<p class="wp-block-paragraph">Three things fed straight back into the project:</p>



<ul class="wp-block-list">
<li>The&nbsp;<a href="https://nothans.com/cable-82-turn-a-raspberry-pi-and-an-old-crt-into-a-1982-cable-bulletin-board-channel">original post</a>&nbsp;now carries a dated update: the kiosk command is&nbsp;<code>chromium</code>&nbsp;in&nbsp;<code>~/.config/labwc/autostart</code>&nbsp;on current Raspberry Pi OS, and the power supply got the mention it earned.</li>



<li>The&nbsp;<a href="https://github.com/nothans/cable-82#running-it-on-a-real-crt-raspberry-pi">repo README</a>&nbsp;was rewritten from this build, step by step as tested, with a Troubleshooting section keyed to the exact errors from the comment thread.</li>



<li>CABLE 82 itself gained CRT mode, the text size setting, the fit-to-page behavior, and the shipped EDID, because a real 1987 tube demanded all four.</li>
</ul>



<p class="wp-block-paragraph">That is the part I did not expect when a reader said &#8220;localhost refused to connect&#8221;: the failure report turned into the best test pass the project ever had!</p>



<h2 id="a-channel-of-your-own" class="wp-block-heading">A channel of your own</h2>


<div class="wp-block-image">
<figure class="aligncenter is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="565" data-attachment-id="5667" data-permalink="https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/the-whole-chain-2" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?fit=1255%2C945&amp;ssl=1" data-orig-size="1255,945" data-comments-opened="0" data-image-title="The whole chain" data-image-description="" data-image-caption="&lt;p&gt;The whole chain: Raspberry Pi 3 B+, RF modulator, coax, and the 1987 Magnavox on channel 3, on the air&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?fit=750%2C565&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?resize=750%2C565&#038;ssl=1" alt="The whole chain: Raspberry Pi 3 B+, RF modulator, coax, and the 1987 Magnavox on channel 3, on the air" class="wp-image-5667" style="aspect-ratio:1.3280763643909526;width:484px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?w=1255&amp;ssl=1 1255w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?resize=300%2C226&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?resize=1024%2C771&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?resize=768%2C578&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?resize=750%2C565&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?resize=500%2C375&amp;ssl=1 500w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/08/23-the-whole-chain-1.jpg?resize=100%2C75&amp;ssl=1 100w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>


<p class="wp-block-paragraph">The Magnavox sits there now, tuned to channel 3, being a channel. The clock, the bake-sale energy, the crawl, the beautiful-music bed coming out of a mono speaker that was built when the music was new. It is a thirty-nine-year-old TV showing a channel that stopped existing before the TV was built, fed by a computer the size of a deck of cards, and the whole thing works because somebody left a comment saying it did not.</p>



<p class="wp-block-paragraph">So: if you build one and it refuses to connect, say so. That is how this channel gets better, and it is very 1982 of you. Thanks.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/cable-82-tv-channel-build-tutorial-rasbperry-pi-3-b-and-old-crt-tv/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5604</post-id>	</item>
		<item>
		<title>Atari Superman Pinball Wall Art Project</title>
		<link>https://nothans.com/atari-superman-pinball-wall-art-project</link>
					<comments>https://nothans.com/atari-superman-pinball-wall-art-project#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Sat, 25 Jul 2026 22:46:06 +0000</pubDate>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[cheerlights]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[pinball]]></category>
		<category><![CDATA[WLED]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=5492</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">My family was spending the day at the <a href="https://www.electromagneticpinballmuseum.com/">Electromagnetic Pinball Museum</a> in Pawtucket, RI, and stumbled across an Atari Pinball Machine. Yes, Atari made pinball machines for a brief, unsuccessful spell. Atari launched the career of the most prolific pinball game designer, <a href="https://en.wikipedia.org/wiki/Steve_Ritchie_(pinball_designer)">Steve Ritchie</a>. Steve is still designing pinball machines 50 years later, with his most recent game, Sonic the Hedgehog from Jersey Jack Pinball. One of the people working there took me around and showed me all of the things that have been donated to the museum&#8230; just rooms and rooms of arcade machines, CRTs, and pinball parts. The Superman pinball machine was not in great shape, but looking at the classic art got me thinking about my yesteryear and sparked an idea&#8230; what if I turned it into some wall art for my game room? The guys said if I made a donation, the pinball playfield for Atari Superman is mine. That night I started my research. I actually didn&#8217;t find too much detail on Atari pinball machines, so I posted on the pinball forums and quickly got connected to people who knew something about it. The main thing was figuring out how far I needed to go to give this a second life, and I am glad that I didn&#8217;t know how much work it was going to be. I just took little steps, learned, shared, engaged with lots of new people, and plodded along. It took a month, but George and I got it done.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://youtube.com/shorts/bCr1r18FhCQ?si=aXXhcFiwhbjGVFm5"><img data-recalc-dims="1" loading="lazy" decoding="async" width="400" height="533" data-attachment-id="5493" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/superman-playfield-lit-small" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/superman-playfield-lit-small.gif?fit=400%2C533&amp;ssl=1" data-orig-size="400,533" data-comments-opened="0" data-image-title="superman playfield lit up with LEDs" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/superman-playfield-lit-small.gif?fit=400%2C533&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/superman-playfield-lit-small.gif?resize=400%2C533&#038;ssl=1" alt="" class="wp-image-5493"/></a></figure>
</div>


<p class="wp-block-paragraph">The results are gorgeous! I learned a lot and will share more of the details when I get time. You can follow the live build here: <a href="https://pinside.com/pinball/forum/topic/atari-superman-playfield-wall-art">https://pinside.com/pinball/forum/topic/atari-superman-playfield-wall-art</a></p>



<h2 id="inserts-and-plastics" class="wp-block-heading">Inserts and Plastics</h2>



<p class="wp-block-paragraph">When I got the playfield home, I realized that I didn&#8217;t have the complete playfield. I only had the wood and the printed art. Every insert, plastic piece, and post was removed. The original owner was planning a playfield restoration and had stopped at some point. The artwork was touched up and looked beautiful, but probably would not work for playing pinball on it. The inserts were going to be important since my goal was to place an LED behind them to make them glow.</p>



<p class="wp-block-paragraph">I put out a post on Pinside looking for any old parts for the Atari Superman Pinball and got a few bites.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="680" height="797" data-attachment-id="5515" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-119" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-9.png?fit=680%2C797&amp;ssl=1" data-orig-size="680,797" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-9.png?fit=680%2C797&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-9.png?resize=680%2C797&#038;ssl=1" alt="" class="wp-image-5515" style="width:546px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-9.png?w=680&amp;ssl=1 680w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-9.png?resize=256%2C300&amp;ssl=1 256w" sizes="auto, (max-width: 680px) 100vw, 680px" /><figcaption class="wp-element-caption">Original Playfield Inserts for Superman Pinball</figcaption></figure>
</div>


<p class="wp-block-paragraph">Soon enough, I got the original parts for this exact playfield. I got to meet up with the pinhead that donated the playfield to the museum. We chatted for hours about 70s and 80s pinball, swapped stories, and made a community connection. It was surreal to find the original owner, but the pinball community is a small niche hobby.</p>



<p class="wp-block-paragraph">I also found the original Superman plafield plastic pieces. They shined right up with <a href="https://amzn.to/4fVQlYp">Novus Plastic Polish</a>. The Novus cleaning products are a must if you work on pinball machines.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5516" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-120" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-10.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-10.png?fit=712%2C945&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-10.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5516" style="width:460px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-10.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-10.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>
</div>


<p class="wp-block-paragraph">To mount the plastic pieces on the playfield, you need post mounts and post stud screws. The mounts were easy to find, but the stud screws were a challenge. New ones were about a dollar each. So, this didn&#8217;t scale well. I needed like 60 of them, so if my math is right, that&#8217;s $60. I turned to eBay and found someone selling &#8220;pounds of old pinball parts&#8221;. This came in at $90! Look at the savings. Somehow, I felt better about buying old used parts than buying new ones at a lower price&#8230; and in the process, I got a bunch of rusty parts I didn&#8217;t even need.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="559" height="652" data-attachment-id="5517" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-121" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-11.png?fit=559%2C652&amp;ssl=1" data-orig-size="559,652" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-11.png?fit=559%2C652&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-11.png?resize=559%2C652&#038;ssl=1" alt="" class="wp-image-5517" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-11.png?w=559&amp;ssl=1 559w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-11.png?resize=257%2C300&amp;ssl=1 257w" sizes="auto, (max-width: 559px) 100vw, 559px" /><figcaption class="wp-element-caption">Rusty Pinball Parts from eBay</figcaption></figure>
</div>


<p class="wp-block-paragraph">My old screw bucket was not happy that I bought someone else&#8217;s old screw bucket and didn&#8217;t even consult it.</p>



<p class="wp-block-paragraph">Mounting all of the playfield parts took a lot of time, but you just do one at a time. I have a new respect for anyone who designs these things. 70s pinball was so much simpler than modern pinball machines, and it was still a lot of parts to track.</p>



<figure data-carousel-extra='{&quot;blog_id&quot;:1,&quot;permalink&quot;:&quot;https://nothans.com/atari-superman-pinball-wall-art-project&quot;}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5525" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-129" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-19.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="playfield posts" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-19.png?fit=712%2C945&amp;ssl=1" data-id="5525" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-19.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5525" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-19.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-19.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5526" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-130" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-20.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="plastic pieces mounted to posts" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-20.png?fit=712%2C945&amp;ssl=1" data-id="5526" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-20.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5526" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-20.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-20.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5527" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-131" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-21.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="lane guides mounted" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-21.png?fit=712%2C945&amp;ssl=1" data-id="5527" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-21.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5527" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-21.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-21.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5528" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-132" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-22.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="making progress on the playfield" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-22.png?fit=712%2C945&amp;ssl=1" data-id="5528" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-22.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5528" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-22.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-22.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>
</figure>



<h2 id="flippers" class="wp-block-heading">Flippers</h2>



<p class="wp-block-paragraph">I wanted to complete the top side of the playfield with flippers. So, I took old flippers from my Strikes and Spares pinball machine and cut them down for this build. Again, this will be wall-mounted, so you can&#8217;t have things sticking out too far in the back. They needed to be modded, and Dremel came to the rescue. Shooting a 6-foot stream of sparks across the room.</p>



<figure data-carousel-extra='{&quot;blog_id&quot;:1,&quot;permalink&quot;:&quot;https://nothans.com/atari-superman-pinball-wall-art-project&quot;}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5521" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-125" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-15.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="Guiding the cut" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-15.png?fit=712%2C945&amp;ssl=1" data-id="5521" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-15.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5521" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-15.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-15.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5523" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-127" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-17.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="starting the cut" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-17.png?fit=712%2C945&amp;ssl=1" data-id="5523" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-17.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5523" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-17.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-17.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5522" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-126" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-16.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="finished flipper arm cut down to the right size" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-16.png?fit=712%2C945&amp;ssl=1" data-id="5522" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-16.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5522" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-16.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-16.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>
</figure>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="527" data-attachment-id="5524" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-128" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-18.png?fit=1024%2C720&amp;ssl=1" data-orig-size="1024,720" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-18.png?fit=750%2C527&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-18.png?resize=750%2C527&#038;ssl=1" alt="" class="wp-image-5524" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-18.png?w=1024&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-18.png?resize=300%2C211&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-18.png?resize=768%2C540&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-18.png?resize=750%2C527&amp;ssl=1 750w" sizes="auto, (max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">Flippers Mounted</figcaption></figure>
</div>


<h2 id="led-control-and-cheerlights" class="wp-block-heading">LED Control and CheerLights</h2>



<p class="wp-block-paragraph">Of course, it is connected to the <a href="https://cheerlights.com/">CheerLights</a> project. This was going to happen 100% of the time whenever I connected 150 LEDs to something. I used WS2811 bullet-style LEDs that you can control one at a time. They fit perfectly in the 12.5mm general illumination holes in the playfield. I used a <a href="https://www.amazon.com/dp/B0D4TG8Y2Z?tag=nothans">WLED controller</a> and a 3A power supply to control the colors, animations, and synchronization with the <a href="https://cheerlights.com/build/wled/">CheerLights MQTT server</a>.</p>



<figure data-carousel-extra='{&quot;blog_id&quot;:1,&quot;permalink&quot;:&quot;https://nothans.com/atari-superman-pinball-wall-art-project&quot;}'  class="wp-block-gallery has-nested-images columns-3 is-cropped is-style-rectangular wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5519" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-123" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-13.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="WS2811 12mm LED" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-13.png?fit=712%2C945&amp;ssl=1" data-id="5519" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-13.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5519" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-13.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-13.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="565" data-attachment-id="5518" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-122" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?fit=1255%2C945&amp;ssl=1" data-orig-size="1255,945" data-comments-opened="0" data-image-title="WS2811 12mm LED back side" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?fit=750%2C565&amp;ssl=1" data-id="5518" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?resize=750%2C565&#038;ssl=1" alt="" class="wp-image-5518" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?resize=1024%2C771&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?resize=300%2C226&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?resize=768%2C578&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?resize=750%2C565&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?resize=500%2C375&amp;ssl=1 500w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?resize=100%2C75&amp;ssl=1 100w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-12.png?w=1255&amp;ssl=1 1255w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5520" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-124" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-14.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="WS2811 12mm LED working" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-14.png?fit=712%2C945&amp;ssl=1" data-id="5520" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-14.png?resize=712%2C945&#038;ssl=1" alt="" class="wp-image-5520" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-14.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-14.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>
</figure>



<p class="wp-block-paragraph">The insert near the flippers stays in sync with the latest CheerLights color while the rest of the inserts can have their own color or visual effects.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="750" data-attachment-id="5494" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-111" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?fit=945%2C945&amp;ssl=1" data-orig-size="945,945" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?fit=750%2C750&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?resize=750%2C750&#038;ssl=1" alt="" class="wp-image-5494" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?w=945&amp;ssl=1 945w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?resize=768%2C768&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?resize=530%2C530&amp;ssl=1 530w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?resize=750%2C750&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-1.png?resize=500%2C500&amp;ssl=1 500w" sizes="auto, (max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">CheerLights Insert on the Superman Pinball Playfield Stays in Sync with the Current CheerLights Color</figcaption></figure>



<p class="wp-block-paragraph">Out of the box, the best animation effect was Stream 2. This very much looks like an attract mode on a pinball machine.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="361" data-attachment-id="5495" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-112" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-2.png?fit=1147%2C552&amp;ssl=1" data-orig-size="1147,552" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-2.png?fit=750%2C361&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-2.png?resize=750%2C361&#038;ssl=1" alt="" class="wp-image-5495" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-2.png?resize=1024%2C493&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-2.png?resize=300%2C144&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-2.png?resize=768%2C370&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-2.png?resize=750%2C361&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-2.png?w=1147&amp;ssl=1 1147w" sizes="auto, (max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">WLED settings for CheerLights and the Superman Pinball Wall Art Project</figcaption></figure>



<h2 id="3d-models" class="wp-block-heading">3D Models</h2>



<p class="wp-block-paragraph">Part of the project was making my first 3D model to have the original pop bumpers mounted above the playfield but not connected to the original mechanism. Since this is wall art, I can&#8217;t have a mechanism sticking out 7 inches on the back. I also could not find the old-style pop bumpers on Maker World, so I designed my own&#8230; ish. Meaning it is not a pop bumper for function, it is a pop bumper to take light from an LED and let it shine through. I just published my first <a href="https://makerworld.com/en/models/3097105-atari-pop-bumper-base-light-up-pinball-display">model</a>!</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="https://makerworld.com/en/models/3097105-atari-pop-bumper-base-light-up-pinball-display" target="_blank"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="425" data-attachment-id="5502" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-113" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-3.png?fit=765%2C434&amp;ssl=1" data-orig-size="765,434" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-3.png?fit=750%2C425&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-3.png?resize=750%2C425&#038;ssl=1" alt="" class="wp-image-5502" style="width:637px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-3.png?w=765&amp;ssl=1 765w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-3.png?resize=300%2C170&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-3.png?resize=750%2C425&amp;ssl=1 750w" sizes="auto, (max-width: 750px) 100vw, 750px" /></a><figcaption class="wp-element-caption">3D Model for Atari Pinball Pop Bumper Base for LED Wall Art Projects</figcaption></figure>
</div>


<p class="wp-block-paragraph">For other parts needed, I found a person on Pinside who created a system called <a href="https://pinside.com/pinball/shops/shop/1167-gameroom-mods/15694-pinglow-playfield-art-system-starter-kits">PinGlow</a>. They were way ahead of me and had thought through the kind of stuff you are going to need for a wall art project like mine. They offer drop targets, stand-up targets, wall mounting kits, and even LEDs. I reached out to them on Pinside, and they offered to make a custom version of their drop targets specifically for the Atari Pinball machine. These drop targets had the Superman logo on them.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="https://pinside.com/pinball/shops/shop/1167-gameroom-mods/15694-pinglow-playfield-art-system-starter-kits" target="_blank"><img data-recalc-dims="1" loading="lazy" decoding="async" width="743" height="803" data-attachment-id="5505" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-114" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-4.png?fit=743%2C803&amp;ssl=1" data-orig-size="743,803" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-4.png?fit=743%2C803&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-4.png?resize=743%2C803&#038;ssl=1" alt="" class="wp-image-5505" style="width:546px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-4.png?w=743&amp;ssl=1 743w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-4.png?resize=278%2C300&amp;ssl=1 278w" sizes="auto, (max-width: 743px) 100vw, 743px" /></a><figcaption class="wp-element-caption">PinGlow parts from Gameroom Mods on Pinside</figcaption></figure>
</div>


<figure data-carousel-extra='{&quot;blog_id&quot;:1,&quot;permalink&quot;:&quot;https://nothans.com/atari-superman-pinball-wall-art-project&quot;}'  class="wp-block-gallery has-nested-images columns-3 is-cropped is-style-rectangular wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="748" height="993" data-attachment-id="5507" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-115" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-5.png?fit=748%2C993&amp;ssl=1" data-orig-size="748,993" data-comments-opened="0" data-image-title="pinglow custom drop targets" data-image-description="" data-image-caption="&lt;p&gt;pinglow custom drop targets&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-5.png?fit=748%2C993&amp;ssl=1" data-id="5507" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-5.png?resize=748%2C993&#038;ssl=1" alt="" class="wp-image-5507" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-5.png?w=748&amp;ssl=1 748w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-5.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 748px) 100vw, 748px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="748" height="993" data-attachment-id="5508" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-116" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-6.png?fit=748%2C993&amp;ssl=1" data-orig-size="748,993" data-comments-opened="0" data-image-title="pinglow drop target mounted to the bottom of the pinall playfield" data-image-description="" data-image-caption="&lt;p&gt;pinglow drop target mounted to the bottom of the pinall playfield&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-6.png?fit=748%2C993&amp;ssl=1" data-id="5508" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-6.png?resize=748%2C993&#038;ssl=1" alt="" class="wp-image-5508" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-6.png?w=748&amp;ssl=1 748w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-6.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 748px) 100vw, 748px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="748" height="993" data-attachment-id="5510" data-permalink="https://nothans.com/atari-superman-pinball-wall-art-project/image-117" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-7.png?fit=748%2C993&amp;ssl=1" data-orig-size="748,993" data-comments-opened="0" data-image-title="pinglow stand up targets" data-image-description="" data-image-caption="&lt;p&gt;pinglow stand up targets&lt;/p&gt;
" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-7.png?fit=748%2C993&amp;ssl=1" data-id="5510" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-7.png?resize=748%2C993&#038;ssl=1" alt="" class="wp-image-5510" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-7.png?w=748&amp;ssl=1 748w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-7.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 748px) 100vw, 748px" /></figure>
</figure>



<h2 id="project-demo" class="wp-block-heading">Project Demo</h2>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Atari Superman Pinball Wall Art Project #esp32 #wled #pinball" width="563" height="1000" src="https://www.youtube.com/embed/bCr1r18FhCQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div><figcaption class="wp-element-caption">Short project video for the Superman Pinball Wall Art Project</figcaption></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/atari-superman-pinball-wall-art-project/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5492</post-id>	</item>
		<item>
		<title>CABLE 82: Turn a Raspberry Pi and an Old CRT Into a 1982 Cable Bulletin Board Channel</title>
		<link>https://nothans.com/cable-82-turn-a-raspberry-pi-and-an-old-crt-into-a-1982-cable-bulletin-board-channel</link>
					<comments>https://nothans.com/cable-82-turn-a-raspberry-pi-and-an-old-crt-into-a-1982-cable-bulletin-board-channel#comments</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Thu, 23 Jul 2026 01:42:05 +0000</pubDate>
				<category><![CDATA[CheerLights]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[CABLE 82]]></category>
		<category><![CDATA[CRT]]></category>
		<category><![CDATA[internet of things]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[retro]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=5489</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Before feeds, your town had a channel.</p>



<p class="wp-block-paragraph">You might know the one if you watched MTV when it first came on cable. A flat blue screen, chunky white text, the time and the temperature in the corner. The Lions Club pancake breakfast. A birthday wish for someone named STEVE. Little League signups at the rec center. Headlines crawling along the bottom while a Muzak version of a song you almost recognized played underneath. I remember watching it for long stretches, waiting for the flea market notice to come back around. Our Sears CRT had the blue bars burnt in.</p>



<p class="wp-block-paragraph">At some point, the Cable Bulletin Board Channel disappeared from all of our lives. NOBODY IS TALKING ABOUT IT.</p>



<p class="wp-block-paragraph">Recently, I have been spending evenings learning about retro gaming and reading posts on Reddit saying that you have to game on a CRT for the proper gaming experience. This led me to Facebook Marketplace. After a few weeks of looking at photos of TVs this got me remembering the big honker in our living room&#8230; then, I uncovered a repressed memory. I had to have it back in my life.</p>



<h2 id="meet-cable-82" class="wp-block-heading">Meet CABLE 82</h2>



<p class="wp-block-paragraph">CABLE 82 is a tiny web app that turns any screen into your own 1982 community bulletin board channel. Ideally that screen is an old 4:3 CRT fed by a Raspberry Pi, sitting in the corner of a room, being ambient.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://github.com/nothans/cable-82"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="600" data-attachment-id="5490" data-permalink="https://nothans.com/cable-82-turn-a-raspberry-pi-and-an-old-crt-into-a-1982-cable-bulletin-board-channel/hero" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?fit=2000%2C1600&amp;ssl=1" data-orig-size="2000,1600" data-comments-opened="0" data-image-title="CABLE 82: Turn a Raspberry Pi and an Old CRT Into a 1982 Cable Bulletin Board Channel" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?fit=750%2C600&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?resize=750%2C600&#038;ssl=1" alt="CABLE 82: Turn a Raspberry Pi and an Old CRT Into a 1982 Cable Bulletin Board Channel" class="wp-image-5490" style="aspect-ratio:1.2504481250448125;width:545px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?resize=1024%2C819&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?resize=300%2C240&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?resize=768%2C614&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?resize=1536%2C1229&amp;ssl=1 1536w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?resize=750%2C600&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?resize=1320%2C1056&amp;ssl=1 1320w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?resize=80%2C64&amp;ssl=1 80w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/hero.jpg?w=2000&amp;ssl=1 2000w" sizes="auto, (max-width: 750px) 100vw, 750px" /></a></figure>
</div>


<p class="wp-block-paragraph">It scrolls the date and time, your community messages, fun facts, dad jokes, live weather, and headlines from whatever RSS feeds you point it at. There is a crawl along the bottom, a red LATEST flag, and a little station bug in the corner, because of course there is.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" class="youtube-player" width="750" height="422" src="https://www.youtube.com/embed/d5Jcfx5oN0A?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
</div></figure>



<p class="wp-block-paragraph">You make it yours in a control room in the browser, or by editing one plain config file. It is free and open source and it runs on a Raspberry Pi.</p>



<p class="wp-block-paragraph">The rest of this post is how to get it going on a Raspberry Pi and a CRT.</p>



<h2 id="step-1-get-it-on-the-air" class="wp-block-heading">Step 1: Get it on the air</h2>



<p class="wp-block-paragraph">SSH into the Pi, or just open a terminal on it, and run:</p>



<pre class="wp-block-code"><code>git clone https://github.com/nothans/cable-82
cd cable-82
node server.js</code></pre>



<p class="wp-block-paragraph">Open&nbsp;<code>http://localhost:1982</code>&nbsp;in a browser on the Pi. You&#8217;re on the air.</p>



<p class="wp-block-paragraph">Out of the box it already looks right: the blue screens, the clock, a couple of example bake-sale messages, and real headlines pulled from a few default feeds.</p>



<h2 id="step-2-make-it-your-channel" class="wp-block-heading">Step 2: Make it your channel</h2>



<p class="wp-block-paragraph">Everything about the channel lives in one place. Open the control room at&nbsp;<code>http://localhost:1982/config</code>&nbsp;and you get the whole thing on one screen: the name, your community messages, which RSS feeds to pull, your town&#8217;s weather, the colors, the page lineup. Change something, hit Save, and the channel updates itself within about twenty seconds. Nobody has to touch the TV.</p>



<p class="wp-block-paragraph">If you would rather edit a file, it all lives in&nbsp;<code>config.json</code>, and you can hand-edit that just as happily. Put your own town in the weather. Drop in the feeds you actually read. Write the messages your household needs to see, which in my house is mostly reminders that trash day is tomorrow.</p>



<h2 id="step-3-run-it-on-boot" class="wp-block-heading">Step 3: Run it on boot</h2>



<p class="wp-block-paragraph">You do not want to SSH in and start a server every time the power blips. Make it a service so the Pi just comes up broadcasting.</p>



<p class="wp-block-paragraph">Create&nbsp;<code>/etc/systemd/system/cable82.service</code>:</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=CABLE 82
After=network-online.target

&#91;Service]
ExecStart=/usr/bin/node /home/pi/cable-82/server.js
Restart=always
User=pi

&#91;Install]
WantedBy=multi-user.target</code></pre>



<p class="wp-block-paragraph">Then turn it on:</p>



<pre class="wp-block-code"><code>sudo systemctl enable --now cable82</code></pre>



<p class="wp-block-paragraph">Now the channel is always running in the background, whether anything is looking at it or not.</p>



<h2 id="step-4-point-a-browser-at-it-full-screen" class="wp-block-heading">Step 4: Point a browser at it, full screen</h2>



<p class="wp-block-paragraph">Have the Pi launch Chromium in kiosk mode, pointed at the channel:</p>



<pre class="wp-block-code"><code>chromium-browser --kiosk --noerrdialogs --disable-infobars \
  --disable-lcd-text \
  --autoplay-policy=no-user-gesture-required \
  http:&#47;&#47;localhost:1982</code></pre>



<p class="wp-block-paragraph">Two of those flags earn their keep.&nbsp;<code>--disable-lcd-text</code>&nbsp;turns off subpixel font smoothing, which otherwise tints the chunky white text a faint pink on some screens.&nbsp;<code>--autoplay-policy=no-user-gesture-required</code>&nbsp;lets the background music start on its own at boot, so nobody has to click anything to get the beautiful-music bed going.</p>



<p class="wp-block-paragraph">While you are in there, turn off screen blanking so the picture never sleeps:&nbsp;<code>sudo raspi-config</code>&nbsp;&gt; Display Options &gt; Screen Blanking &gt; No.</p>



<h2 id="step-5-get-it-onto-a-real-crt" class="wp-block-heading">Step 5: Get it onto a real CRT</h2>



<p class="wp-block-paragraph">The easiest and most reliable hookup works on any Pi and any TV with a coax (antenna) input. Run&nbsp;HDMI from the Pi into an&nbsp;<a href="https://amzn.to/4ftrKsq">HDMI-to-coax RF modulator</a>, then run coax from the modulator into the TV, and tune the TV to&nbsp;channel 3 or 4. Your Pi is now a broadcast channel and the TV is receiving it over the air the way God and 1982 intended.</p>



<p class="wp-block-paragraph">If the TV crops the edges of the picture, bump up the overscan margin in the control room until nothing important gets cut off. There are no fake scanline filters in CABLE 82, on purpose. The CRT is the filter.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="691" height="553" data-attachment-id="5601" data-permalink="https://nothans.com/cable-82-turn-a-raspberry-pi-and-an-old-crt-into-a-1982-cable-bulletin-board-channel/image-147" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-35.png?fit=691%2C553&amp;ssl=1" data-orig-size="691,553" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-35.png?fit=691%2C553&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-35.png?resize=691%2C553&#038;ssl=1" alt="" class="wp-image-5601" style="width:269px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-35.png?w=691&amp;ssl=1 691w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-35.png?resize=300%2C240&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-35.png?resize=80%2C64&amp;ssl=1 80w" sizes="auto, (max-width: 691px) 100vw, 691px" /></figure>
</div>


<h2 id="step-6-give-it-a-soundtrack" class="wp-block-heading">Step 6: Give it a soundtrack</h2>



<p class="wp-block-paragraph">Drop a few audio files into the&nbsp;<code>music/</code>&nbsp;folder and CABLE 82 plays them as a continuous background bed behind the pages, looping the set, shuffling if you like. Two tracks ship with it to get you started. Aim for the sound the old channels actually used: beautiful music, easy listening, and eventually the famous smooth jazz.</p>



<h2 id="a-channel-of-your-own" class="wp-block-heading">A channel of your own</h2>



<p class="wp-block-paragraph">A Pi, an old TV, a coax cable, and a folder of files, and now there is a corner of your house that runs its own quiet little channel: your messages, your weather, your headlines, your dad jokes, scrolling by all day.</p>



<p class="wp-block-paragraph">It&#8217;s not useful, exactly. It&#8217;s better than useful.</p>



<p class="wp-block-paragraph">CABLE 82 is open source and lives at&nbsp;<a href="https://github.com/nothans/cable-82">github.com/nothans/cable-82</a>.</p>



<h2 id="project-demo-video" class="wp-block-heading">Project Demo Video</h2>



<p class="wp-block-paragraph">Watch 6 minutes of glorious community news like it is 1982. Enjoy.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" class="youtube-player" width="750" height="422" src="https://www.youtube.com/embed/0YEvI_oFfqY?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
</div></figure>



<h2 id="update-july-27-2026-cheerlights-support" class="wp-block-heading">Update July 27, 2026: CheerLights Support</h2>



<p class="wp-block-paragraph">I can&#8217;t believe that it took me a few days to do this&#8230; <a href="https://cheerlights.com/">CheerLights</a>. A perfect feed (for me) is to see the latest CheerLights color scroll by every once in a while. Okay, so now you can add CheerLights feed support with a custom message if needed.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://github.com/nothans/cable-82"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="422" data-attachment-id="5531" data-permalink="https://nothans.com/cable-82-turn-a-raspberry-pi-and-an-old-crt-into-a-1982-cable-bulletin-board-channel/image-133" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?fit=1920%2C1080&amp;ssl=1" data-orig-size="1920,1080" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?fit=750%2C422&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?resize=750%2C422&#038;ssl=1" alt="" class="wp-image-5531" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?resize=750%2C422&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?resize=480%2C270&amp;ssl=1 480w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?resize=1320%2C743&amp;ssl=1 1320w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-23.png?w=1920&amp;ssl=1 1920w" sizes="auto, (max-width: 750px) 100vw, 750px" /></a><figcaption class="wp-element-caption">CheerLights is now on the CABLE 82 project</figcaption></figure>
</div>


<h2 id="update-august-22-2026-updated-github-readme-and-better-crt-support" class="wp-block-heading">Update August 22, 2026: Updated GitHub README and better CRT support</h2>



<p class="wp-block-paragraph">Based on some user feedback, I built a version of the project on an older Raspberry Pi and used a much older CRT TV. This helped me find some areas for improvement.</p>



<p class="wp-block-paragraph">I updated the kiosk command to use chromium (not chromium-browser), and it goes in ~/.config/labwc/autostart.</p>



<p class="wp-block-paragraph">Old TVs do not have as much contrast as newer ones, so I added a CRT mode to help. This is in the &#8220;control room&#8221; or in the config.</p>



<p class="wp-block-paragraph">And, a user reported &#8220;throttling&#8221; of the CPU. This happens when the Raspberry Pi is underpowered. This usually happens when you use a phone USB charger instead of a Raspberry Pi power supply.</p>



<p class="wp-block-paragraph">From what I learned during the first month of the project, I added a <a href="https://github.com/nothans/cable-82#troubleshooting">troubleshooting</a> section to the GitHub README for the CABLE 82 project.</p>



<p class="wp-block-paragraph">I will publish an end-to-end tutorial for a Raspberry Pi 3 B+ soon to help smooth out the installation steps.</p>



<p class="wp-block-paragraph">Thanks for sharing your feedback and trying the project. It helps all of us.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="712" height="945" data-attachment-id="5596" data-permalink="https://nothans.com/cable-82-turn-a-raspberry-pi-and-an-old-crt-into-a-1982-cable-bulletin-board-channel/image-146" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-34.png?fit=712%2C945&amp;ssl=1" data-orig-size="712,945" data-comments-opened="0" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-34.png?fit=712%2C945&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-34.png?resize=712%2C945&#038;ssl=1" alt="Cable-82 running a Raspberry Pi and a CRT TV from 1987" class="wp-image-5596" style="aspect-ratio:0.7534664689979943;width:270px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-34.png?w=712&amp;ssl=1 712w, https://i0.wp.com/nothans.com/wp-content/uploads/2026/07/image-34.png?resize=226%2C300&amp;ssl=1 226w" sizes="auto, (max-width: 712px) 100vw, 712px" /><figcaption class="wp-element-caption">CABLE 82 server running on a Raspberry Pi and a CRT TV from 1987</figcaption></figure>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/cable-82-turn-a-raspberry-pi-and-an-old-crt-into-a-1982-cable-bulletin-board-channel/feed</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5489</post-id>	</item>
		<item>
		<title>Learn How to Create Your Own MCP Server for Claude Desktop and Windsurf</title>
		<link>https://nothans.com/learn-how-to-create-your-own-mcp-server-for-claude-desktop-and-windsurf</link>
					<comments>https://nothans.com/learn-how-to-create-your-own-mcp-server-for-claude-desktop-and-windsurf#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Tue, 18 Mar 2025 18:38:07 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[CheerLights]]></category>
		<category><![CDATA[cheerlights]]></category>
		<category><![CDATA[internet of things]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[thingspeak]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=5073</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The notion of an MCP &#8211; Model Context Protocol &#8211; has gone viral!</p>



<p class="wp-block-paragraph">MCP attempts to standardize how LLM tools like Claude Desktop and Windsurf connect with external data sources and tools. So, naturally, I thought, &#8220;Put a bird on it.&#8221; Er, I mean, &#8220;Let&#8217;s CheerLight it.&#8221; By building a <a href="https://cheerlights.com">CheerLights</a> interface, I learned everything from how to build Python libraries to Chrome extensions to Adrino integrations.</p>



<p class="wp-block-paragraph">This looks like a big deal. I recommend that you learn how to build your own MCP server and/or use one of the hundreds that have already been created: <a href="https://github.com/punkpeye/awesome-mcp-servers">https://github.com/punkpeye/awesome-mcp-servers</a></p>



<p class="wp-block-paragraph">I am using Windsurf on Windows for this tutorial.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="713" data-attachment-id="5074" data-permalink="https://nothans.com/learn-how-to-create-your-own-mcp-server-for-claude-desktop-and-windsurf/image-53" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image.png?fit=1227%2C1166&amp;ssl=1" data-orig-size="1227,1166" data-comments-opened="0" data-image-title="CheerLights MCP for Claude and Windsurf and other AI Apps" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image.png?fit=750%2C713&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image.png?resize=750%2C713&#038;ssl=1" alt="" class="wp-image-5074" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image.png?resize=1024%2C973&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image.png?resize=300%2C285&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image.png?resize=768%2C730&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image.png?resize=750%2C713&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image.png?w=1227&amp;ssl=1 1227w" sizes="auto, (max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">CheerLights MCP in Windsurf</figcaption></figure>
</div>


<p class="wp-block-paragraph">From Windsurf, open the Terminal (View -> Terminal). Create a new folder called, &#8220;cheerlights-mcp&#8221; and enter it. Create a new file called, &#8220;server.py&#8221; and copy in the <a href="https://github.com/cheerlights/cheerlights-mcp/blob/main/server.py">CheerLights MCP</a> server code from GitHub.</p>



<p class="wp-block-paragraph">From the terminal:</p>



<ul class="wp-block-list">
<li>PS C:\github> cd .\cheerlights-mcp\</li>



<li>PS C:\github\cheerlights-mcp> python -m venv .venv</li>



<li>PS C:\github\cheerlights-mcp> .venv\Scripts\activate</li>



<li>PS C:\github\cheerlights-mcp> pip install <em>mcp httpx</em></li>
</ul>



<p class="wp-block-paragraph">Add the CheerLights MCP to the Windsurf config file (adjust the path as needed).</p>



<pre class="wp-block-code"><code>{
    "mcpServers": {
        "cheerlights": {
            "command": "python",
            "args": &#91;"C:\\github\\cheerlights-mcp\\server.py"]
        }
    }
}</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="258" data-attachment-id="5075" data-permalink="https://nothans.com/learn-how-to-create-your-own-mcp-server-for-claude-desktop-and-windsurf/image-1-32" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-1.png?fit=978%2C337&amp;ssl=1" data-orig-size="978,337" data-comments-opened="0" data-image-title="image-1" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-1.png?fit=750%2C258&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-1.png?resize=750%2C258&#038;ssl=1" alt="" class="wp-image-5075" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-1.png?w=978&amp;ssl=1 978w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-1.png?resize=300%2C103&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-1.png?resize=768%2C265&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-1.png?resize=750%2C258&amp;ssl=1 750w" sizes="auto, (max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">CheerLights MCP added to the Windsurf MCP Config File</figcaption></figure>
</div>


<p class="wp-block-paragraph">Restart Windsurf.</p>



<p class="wp-block-paragraph">From the terminal, start the Python server for the MCP: PS C:\github\cheerlights-mcp> python <em>server.py</em></p>



<p class="wp-block-paragraph">This should enable the CheerLights MCP and show two tools in the Cascade Chat area.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="597" height="765" data-attachment-id="5076" data-permalink="https://nothans.com/learn-how-to-create-your-own-mcp-server-for-claude-desktop-and-windsurf/image-2-29" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-2.png?fit=597%2C765&amp;ssl=1" data-orig-size="597,765" data-comments-opened="0" data-image-title="image-2" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-2.png?fit=597%2C765&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-2.png?resize=597%2C765&#038;ssl=1" alt="" class="wp-image-5076" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-2.png?w=597&amp;ssl=1 597w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-2.png?resize=234%2C300&amp;ssl=1 234w" sizes="auto, (max-width: 597px) 100vw, 597px" /><figcaption class="wp-element-caption">CheerLights MCP enabled in Windsurf Cascade Chat</figcaption></figure>
</div>


<p class="wp-block-paragraph">To use CheerLights MCP, you can ask Cascade, &#8220;What&#8217;s the current CheerLights color?&#8221; This will eventually get sent to the CheerLights MCP and the get_current_color() tool. If it all works, you will find out the latest color is magenta (or whatever the latest color happens to be)!</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="577" height="375" data-attachment-id="5077" data-permalink="https://nothans.com/learn-how-to-create-your-own-mcp-server-for-claude-desktop-and-windsurf/image-3-29" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-3.png?fit=577%2C375&amp;ssl=1" data-orig-size="577,375" data-comments-opened="0" data-image-title="image-3" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-3.png?fit=577%2C375&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-3.png?resize=577%2C375&#038;ssl=1" alt="" class="wp-image-5077" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-3.png?w=577&amp;ssl=1 577w, https://i0.wp.com/nothans.com/wp-content/uploads/2025/03/image-3.png?resize=300%2C195&amp;ssl=1 300w" sizes="auto, (max-width: 577px) 100vw, 577px" /><figcaption class="wp-element-caption">CheerLights MCP tells Windsurf the latest color is magenta</figcaption></figure>
</div>


<p class="wp-block-paragraph">All of the source code is available on <a href="https://github.com/cheerlights/cheerlights-mcp">GitHub</a>. Let me know if you give this a try and if you build your own. Have fun!</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/learn-how-to-create-your-own-mcp-server-for-claude-desktop-and-windsurf/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5073</post-id>	</item>
		<item>
		<title>Official Arduino Library for CheerLights</title>
		<link>https://nothans.com/official-arduino-library-for-cheerlights</link>
					<comments>https://nothans.com/official-arduino-library-for-cheerlights#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Sat, 14 Dec 2024 00:56:08 +0000</pubDate>
				<category><![CDATA[CheerLights]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[ThingSpeak]]></category>
		<category><![CDATA[cheerlights]]></category>
		<category><![CDATA[internet of things]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[thingspeak]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=4975</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I have published an <a href="https://github.com/cheerlights/cheerlights-arduino-library">official library</a> that supports Arduino-compatible Wi-Fi-enabled boards, along with several <a href="https://github.com/cheerlights/cheerlights-arduino-library/tree/main/examples">examples</a>. The library supports the Arduino MKR1000, Arduino MKR WiFi 1010, Arduino Uno WiFi Rev2, Arduino Mega WiFi Rev2, Arduino Uno R4 WiFi, ESP8266, and ESP32. Include the library at the top of your Arduino sketch, use the method <em>CheerLights.getCurrentColor()</em>, and set the color of your RGB LEDs.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://reference.arduino.cc/reference/en/libraries/cheerlights/"><img data-recalc-dims="1" loading="lazy" decoding="async" width="545" height="386" data-attachment-id="4976" data-permalink="https://nothans.com/official-arduino-library-for-cheerlights/cheerlights-for-arduino" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/12/CheerLights-for-Arduino.png?fit=545%2C386&amp;ssl=1" data-orig-size="545,386" data-comments-opened="0" data-image-title="CheerLights for Arduino" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/12/CheerLights-for-Arduino.png?fit=545%2C386&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/12/CheerLights-for-Arduino.png?resize=545%2C386&#038;ssl=1" alt="" class="wp-image-4976" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/12/CheerLights-for-Arduino.png?w=545&amp;ssl=1 545w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/12/CheerLights-for-Arduino.png?resize=300%2C212&amp;ssl=1 300w" sizes="auto, (max-width: 545px) 100vw, 545px" /></a><figcaption class="wp-element-caption"><a href="https://github.com/cheerlights/cheerlights-arduino-library">CheerLights Arduino Library</a></figcaption></figure>
</div>


<h3 id="arduino-library-installation" class="wp-block-heading">Arduino Library Installation<a href="https://github.com/cheerlights/cheerlights-arduino-library#ide-installation"></a></h3>



<ol class="wp-block-list">
<li>Open the Arduino IDE.</li>



<li>Select Tools > Manage Libraries.</li>



<li>Search for “CheerLights” and click “install”.</li>
</ol>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" class="youtube-player" width="750" height="422" src="https://www.youtube.com/embed/eIaIDUzz9eY?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
</div><figcaption class="wp-element-caption">How to Install The CheerLights Library for Arduino</figcaption></figure>



<h2 id="cheerlights-arduino-methods" class="wp-block-heading">CheerLights Arduino Methods<a href="https://github.com/cheerlights/cheerlights-arduino-library#methods"></a></h2>



<ul class="wp-block-list">
<li><code>begin(const char* ssid, const char* password)</code>: Initialize the library with your WiFi credentials to let the library handle the WiFi connection.</li>



<li><code>begin()</code>: Initialize the library without WiFi credentials (use this to manually connect to the WiFi network and manage the WiFi connection outside the library).</li>



<li><code>reconnect()</code>: Reconnect to the WiFi network.</li>



<li><code>isConnected()</code>: Returns a boolean indicating whether the library is connected to the WiFi network.</li>



<li><code>getCurrentColor()</code>: Get the current CheerLights color from ThingSpeak channel 1417. Returns a pointer to a constant char array.</li>



<li><code>currentColorName()</code>: The current CheerLights color name (e.g., “red”). Returns a pointer to a constant char array.</li>



<li><code>currentColorHex()</code>: The current CheerLights color as a hex value (e.g., 0xFF0000). Returns a uint32_t.</li>



<li><code>currentRed()</code>, <code>currentGreen()</code>, <code>currentBlue()</code>: The RGB values for the current CheerLights color (e.g., 255, 0, 0). Returns a uint8_t.</li>



<li><code>currentHue()</code>, <code>currentSaturation()</code>, <code>currentValue()</code>: The HSV values for the current CheerLights color (e.g. 0, 255, 255). Returns a uint16_t for hue and uint8_t for saturation and value.</li>



<li><code>hasColorChanged()</code>: Returns a boolean indicating whether the current CheerLights color has changed since the last call to this method.</li>
</ul>



<h2 id="cheerlights-projects" class="wp-block-heading">CheerLights Projects</h2>



<p class="wp-block-paragraph">Now, that you know about the Arduino library for CheerLights, you might be thinking about what you can do with it. CheerLights is a global network of synchronized lights. The lights are all set to the same color. Anyone can change the color by changing it on the <a href="https://cheerlights.com/discord">CheerLights Discord Server</a> and other social networks like Mastodon and BlueSky.</p>



<p class="wp-block-paragraph">Get inspired by taking a look at the <a href="https://cheerlights.com/build/">build gallery</a> at the CheerLights website.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/official-arduino-library-for-cheerlights/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4975</post-id>	</item>
		<item>
		<title>Updating WLED Binary on ESP32-C3 Devices</title>
		<link>https://nothans.com/updating-wled-binary-on-esp32-c3-devices</link>
					<comments>https://nothans.com/updating-wled-binary-on-esp32-c3-devices#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Wed, 13 Nov 2024 02:31:39 +0000</pubDate>
				<category><![CDATA[CheerLights]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[cheerlights]]></category>
		<category><![CDATA[internet of things]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[thingspeak]]></category>
		<category><![CDATA[WLED]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=4871</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I recently bought a WLED controller based on the ESP32-C3 microcontroller. It has a button and a 3-pin connector for NeoPixel-style LEDs (WS281x). Once connected to Wi-Fi, this device gives you full access to the configuration, colors, and effects via the WLED app. My goal is to update its code to the latest version of WLED&#8230; <em>and maybe connect it to <a href="https://cheerlights.com">CheerLights</a></em>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="612" height="803" data-attachment-id="4874" data-permalink="https://nothans.com/updating-wled-binary-on-esp32-c3-devices/image-5-22" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-5.png?fit=612%2C803&amp;ssl=1" data-orig-size="612,803" data-comments-opened="0" data-image-title="WLED controller and LEDs" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-5.png?fit=612%2C803&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-5.png?resize=612%2C803&#038;ssl=1" alt="" class="wp-image-4874" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-5.png?w=612&amp;ssl=1 612w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-5.png?resize=229%2C300&amp;ssl=1 229w" sizes="auto, (max-width: 612px) 100vw, 612px" /></figure>
</div>


<h2 id="wled-installation-on-windows" class="wp-block-heading">WLED Installation on Windows</h2>



<ul class="wp-block-list">
<li>Download &#8216;esptool.exe&#8217; app from the <a href="https://github.com/espressif/esptool/releases">esptool releases</a> area.</li>



<li>Download the latest release of <a href="https://github.com/Aircoookie/WLED/releases">WLED</a> for the device that you are using.</li>



<li>Plug in the device and note the COM port.</li>



<li>Open the Command Prompt and enter this command:</li>
</ul>



<pre class="wp-block-code"><code>esptool.exe -p <strong>COMXXXXX</strong> write_flash 0x010000 WLED_0.14.4_ESP32-C3.bin</code></pre>



<p class="wp-block-paragraph">Note: Change COMXXXXX to the actual COM port that your device is connected to. If your ESP device is on COM 9, then this would be <strong>COM9</strong>.</p>



<p class="wp-block-paragraph">Here&#8217;s what it looks like when everything works successfully on Windows:</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="414" data-attachment-id="4873" data-permalink="https://nothans.com/updating-wled-binary-on-esp32-c3-devices/image-4-23" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-4.png?fit=807%2C445&amp;ssl=1" data-orig-size="807,445" data-comments-opened="0" data-image-title="image-4" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-4.png?fit=750%2C414&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-4.png?resize=750%2C414&#038;ssl=1" alt="" class="wp-image-4873" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-4.png?w=807&amp;ssl=1 807w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-4.png?resize=300%2C165&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-4.png?resize=768%2C423&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-4.png?resize=750%2C414&amp;ssl=1 750w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<h2 id="wled-configuration" class="wp-block-heading">WLED Configuration</h2>



<p class="wp-block-paragraph">This device&#8217;s button is on GPIO 9, and the data pin for LED lights is on GPIO 10. I need to set these in the WLED configuration for the lights to work.</p>



<ul class="wp-block-list">
<li>From WLED, select Config -&gt; LED Preferences. </li>



<li>Under LED outputs, enter &#8217;10&#8217; into the GPIO box.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="342" height="366" data-attachment-id="4875" data-permalink="https://nothans.com/updating-wled-binary-on-esp32-c3-devices/image-6-19" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-6.png?fit=342%2C366&amp;ssl=1" data-orig-size="342,366" data-comments-opened="0" data-image-title="image-6" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-6.png?fit=342%2C366&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-6.png?resize=342%2C366&#038;ssl=1" alt="" class="wp-image-4875" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-6.png?w=342&amp;ssl=1 342w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-6.png?resize=280%2C300&amp;ssl=1 280w" sizes="auto, (max-width: 342px) 100vw, 342px" /><figcaption class="wp-element-caption">WLED LED Settings</figcaption></figure>
</div>


<ul class="wp-block-list">
<li>Scroll down the GPIO button sections.</li>



<li>Select 9 for Button 0 and set to pushbutton.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="451" height="149" data-attachment-id="4876" data-permalink="https://nothans.com/updating-wled-binary-on-esp32-c3-devices/image-7-18" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-7.png?fit=451%2C149&amp;ssl=1" data-orig-size="451,149" data-comments-opened="0" data-image-title="image-7" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-7.png?fit=451%2C149&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-7.png?resize=451%2C149&#038;ssl=1" alt="" class="wp-image-4876" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-7.png?w=451&amp;ssl=1 451w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-7.png?resize=300%2C99&amp;ssl=1 300w" sizes="auto, (max-width: 451px) 100vw, 451px" /><figcaption class="wp-element-caption">WLED Button Settings</figcaption></figure>
</div>


<ul class="wp-block-list">
<li>Scroll to the bottom and select <strong>Save</strong>.</li>
</ul>



<h2 id="cheerlights-settings-optional" class="wp-block-heading">CheerLights Settings (optional)</h2>



<p class="wp-block-paragraph">If (and when) you want to connect this WLED controller to CheerLights, just add the CheerLights MQTT server address to the Sync Interfaces. For MQTT to work, you will need to cycle the power going to the board (i.e., unplug and plug back in).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="641" height="465" data-attachment-id="4877" data-permalink="https://nothans.com/updating-wled-binary-on-esp32-c3-devices/image-8-18" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-8.png?fit=641%2C465&amp;ssl=1" data-orig-size="641,465" data-comments-opened="0" data-image-title="image-8" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-8.png?fit=641%2C465&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-8.png?resize=641%2C465&#038;ssl=1" alt="" class="wp-image-4877" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-8.png?w=641&amp;ssl=1 641w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-8.png?resize=300%2C218&amp;ssl=1 300w" sizes="auto, (max-width: 641px) 100vw, 641px" /><figcaption class="wp-element-caption">WLED Settings for CheerLights</figcaption></figure>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/updating-wled-binary-on-esp32-c3-devices/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4871</post-id>	</item>
		<item>
		<title>Learning How to Use the Arduino UNO R4 WiFi Board</title>
		<link>https://nothans.com/learning-how-to-use-the-arduino-uno-r4-wifi-board</link>
					<comments>https://nothans.com/learning-how-to-use-the-arduino-uno-r4-wifi-board#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Sat, 02 Nov 2024 18:43:26 +0000</pubDate>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[cheerlights]]></category>
		<category><![CDATA[internet of things]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[web of things]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=4856</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I jumped back into official Arduino boards after I saw an ad for the <a href="https://amzn.to/3YwQCXV">Arduino UNO R4 WiFi</a> board. I have used Wemos and ESP-based devices for five years, but this new Arduino UNO R4 WiFi has an LED matrix right on the board! I am a sucker for LEDs.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="https://amzn.to/3YwQCXV"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="638" data-attachment-id="4858" data-permalink="https://nothans.com/learning-how-to-use-the-arduino-uno-r4-wifi-board/image-1-28" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-1.png?fit=783%2C666&amp;ssl=1" data-orig-size="783,666" data-comments-opened="0" data-image-title="Arduino UNO R4 WiFi with Heart" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-1.png?fit=750%2C638&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-1.png?resize=750%2C638&#038;ssl=1" alt="" class="wp-image-4858" style="width:553px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-1.png?w=783&amp;ssl=1 783w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-1.png?resize=300%2C255&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-1.png?resize=768%2C653&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-1.png?resize=750%2C638&amp;ssl=1 750w" sizes="auto, (max-width: 750px) 100vw, 750px" /></a><figcaption class="wp-element-caption"><a href="https://amzn.to/3YwQCXV">Arduino UNO R4 WiFi</a></figcaption></figure>
</div>


<h2 id="configure-the-arduino-ide-to-support-the-arduino-uno-rf-wifi-board" class="wp-block-heading">Configure the Arduino IDE to Support the Arduino UNO RF WiFi Board</h2>



<p class="wp-block-paragraph">To use the Arduino UNO R4 WiFi board, you need to update and install some board drivers.</p>



<ul class="wp-block-list">
<li>Open the Arduino IDE (from <a href="https://www.arduino.cc/en/software">Arduino</a>) and update to v2.3.3 or newer.</li>



<li>Go to the <em>Boards Manager</em>, search &#8220;Arduino UNO R4&#8221; and click INSTALL.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="405" height="246" data-attachment-id="4859" data-permalink="https://nothans.com/learning-how-to-use-the-arduino-uno-r4-wifi-board/image-2-25" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-2.png?fit=405%2C246&amp;ssl=1" data-orig-size="405,246" data-comments-opened="0" data-image-title="image-2" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-2.png?fit=405%2C246&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-2.png?resize=405%2C246&#038;ssl=1" alt="" class="wp-image-4859" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-2.png?w=405&amp;ssl=1 405w, https://i0.wp.com/nothans.com/wp-content/uploads/2024/11/image-2.png?resize=300%2C182&amp;ssl=1 300w" sizes="auto, (max-width: 405px) 100vw, 405px" /><figcaption class="wp-element-caption">Arduino Boards Manager for Arduino UNO R4</figcaption></figure>
</div>


<h2 id="controlling-the-led-matrix" class="wp-block-heading">Controlling the LED Matrix</h2>



<p class="wp-block-paragraph"><em>I am here for the LEDs.</em></p>



<p class="wp-block-paragraph">Here&#8217;s how to use the onboard LED matrix, which requires the LED_Matrix library. Start your sketches with &#8220;#include &#8220;Arduino_LED_Matrix.h&#8221;, create an instance, and begin it in the setup section of your code.</p>



<p class="wp-block-paragraph">Here&#8217;s an animation example:</p>



<pre class="wp-block-code"><code>#include "Arduino_LED_Matrix.h"   
#include "animation.h"            

ArduinoLEDMatrix matrix;  

void setup() {
  matrix.loadSequence(animation);
  matrix.begin();
  matrix.play(true);
}

void loop() {
}</code></pre>



<p class="wp-block-paragraph">I learned everything that I know about this from the Arduino documentation: <a href="https://docs.arduino.cc/tutorials/uno-r4-wifi/led-matrix/">https://docs.arduino.cc/tutorials/uno-r4-wifi/led-matrix/</a></p>



<p class="wp-block-paragraph">The cool part is that the library includes predefined frames. You can load these, and the Arduino UNO R4 WiFi displays them without knowing how to code the frames.</p>



<pre class="wp-block-code"><code>#include "Arduino_LED_Matrix.h"

ArduinoLEDMatrix matrix;          

void setup() {
  matrix.begin();                 
}

void loop() {
  matrix.loadFrame(<strong>LEDMATRIX_HEART_BIG</strong>);
}</code></pre>



<p class="wp-block-paragraph">Here are the available frames in the LED_Matrix library:</p>



<ul class="wp-block-list">
<li><code>LEDMATRIX_BLUETOOTH</code></li>



<li><code>LEDMATRIX_BOOTLOADER_ON</code></li>



<li><code>LEDMATRIX_CHIP</code></li>



<li><code>LEDMATRIX_CLOUD_WIFI</code></li>



<li><code>LEDMATRIX_DANGER</code></li>



<li><code>LEDMATRIX_EMOJI_BASIC</code></li>



<li><code>LEDMATRIX_EMOJI_HAPPY</code></li>



<li><code>LEDMATRIX_EMOJI_SAD</code></li>



<li><code>LEDMATRIX_HEART_BIG</code></li>



<li><code>LEDMATRIX_HEART_SMALL</code></li>



<li><code>LEDMATRIX_LIKE</code></li>



<li><code>LEDMATRIX_MUSIC_NOTE</code></li>



<li><code>LEDMATRIX_RESISTOR</code></li>



<li><code>LEDMATRIX_UNO</code></li>
</ul>



<h2 id="going-further" class="wp-block-heading">Going Further</h2>



<p class="wp-block-paragraph">George and I explored this new board together. We had a lot of fun trying out the examples from the Arduino documentation and experimenting on our own. You know that I will be hooking this up to <a href="https://cheerlights.com">CheerLights</a> soon, but we noticed that the LEDs are only red. We will have to get creative. Then, George had an idea&#8230; He said, &#8220;Let&#8217;s make a CheerLights for emoji. Like, red could be a smiley face.&#8221; Great idea. <em>I might just do that.</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/learning-how-to-use-the-arduino-uno-r4-wifi-board/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4856</post-id>	</item>
		<item>
		<title>World&#8217;s First GPT for IoT? Learn IoT From the CheerLights Expert GPT powered by ChatGPT.</title>
		<link>https://nothans.com/cheerlights-iot-expert-gpt</link>
					<comments>https://nothans.com/cheerlights-iot-expert-gpt#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Fri, 17 Nov 2023 22:17:26 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[CheerLights]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[cheerlights]]></category>
		<category><![CDATA[internet of things]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[thingspeak]]></category>
		<category><![CDATA[web of things]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=4304</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">CheerLights has entered the chat&#8230; the <em>ChatGPT</em>.</p>



<p class="wp-block-paragraph">We are experiencing the capabilities and limitations of AI collectively. After OpenAI&#8217;s Dev Day, I have been thinking of ways to learn the new features, services, and APIs that were dropped. This time of year always brings about a lot of inspiring <a href="https://cheerlights.com">CheerLights</a> projects and new people joining CheerLights. This also comes with a lot of questions, as the new folks are learning IoT, looking for sample code, or just looking for inspiration on what to build. This gave me an idea and a challenge. Could I build an AI chatbot that can help onboard new people onto the CheerLights project and help them learn IoT?</p>



<p class="wp-block-paragraph">If you have ChatGPT Plus, you can try the <a href="https://chat.openai.com/g/g-E2zjJXE56-cheerlights-iot-expert">CheerLights IoT Expert</a> bot right now.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="https://chat.openai.com/g/g-E2zjJXE56-cheerlights-iot-expert"><img data-recalc-dims="1" loading="lazy" decoding="async" width="592" height="754" data-attachment-id="4305" data-permalink="https://nothans.com/cheerlights-iot-expert-gpt/image-5-14" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-5.png?fit=592%2C754&amp;ssl=1" data-orig-size="592,754" data-comments-opened="0" data-image-title="image-5" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-5.png?fit=592%2C754&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-5.png?resize=592%2C754&#038;ssl=1" alt="" class="wp-image-4305" style="width:312px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-5.png?w=592&amp;ssl=1 592w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-5.png?resize=236%2C300&amp;ssl=1 236w" sizes="auto, (max-width: 592px) 100vw, 592px" /></a><figcaption class="wp-element-caption"><a href="https://chat.openai.com/g/g-E2zjJXE56-cheerlights-iot-expert">CheerLights IoT Expert GPT</a></figcaption></figure>
</div>


<h2 id="what-is-cheerlights" class="wp-block-heading">What is CheerLights?</h2>



<p class="wp-block-paragraph"><a href="https://cheerlights.com">CheerLights</a> is an Internet of Things (IoT) project that creates a global network of lights that change color in unison. The concept is straightforward yet powerful: any connected light anywhere in the world will change to the same color when a new color is set. This allows people across different locations to feel connected through a shared lighting experience.</p>



<h2 id="features-of-the-cheerlights-iot-expert-gpt" class="wp-block-heading">Features of the CheerLights IoT Expert GPT</h2>



<p class="wp-block-paragraph">The CheerLights IoT Expert GPT has a lot of general knowledge of Arduino, ESP Wi-Fi devices, ThingSpeak, and CheerLights. You can ask anything from the basics to advanced things like code generation for a specific device configuration.</p>



<ul class="wp-block-list">
<li>Natural language interface</li>



<li>Onboarding prompts to get started</li>



<li>Technical support and debugging</li>



<li>Idea generation</li>



<li>Code generation</li>



<li>The world&#8217;s most sophisticated CheerLights color checker</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://chat.openai.com/g/g-E2zjJXE56-cheerlights-iot-expert"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="667" data-attachment-id="4307" data-permalink="https://nothans.com/cheerlights-iot-expert-gpt/image-6-12" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-6.png?fit=1101%2C980&amp;ssl=1" data-orig-size="1101,980" data-comments-opened="0" data-image-title="image-6" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-6.png?fit=750%2C667&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-6.png?resize=750%2C667&#038;ssl=1" alt="" class="wp-image-4307" style="width:614px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-6.png?resize=1024%2C911&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-6.png?resize=300%2C267&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-6.png?resize=768%2C684&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-6.png?resize=750%2C668&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-6.png?w=1101&amp;ssl=1 1101w" sizes="auto, (max-width: 750px) 100vw, 750px" /></a></figure>
</div>


<h2 id="how-it-works" class="wp-block-heading">How it works</h2>



<p class="wp-block-paragraph">A Generative Pre-trained Transformer (GPT) is an advanced type of artificial intelligence model designed to understand and generate human-like text. This is the technology that ChatGPT is built on. It&#8217;s built using a neural network architecture called a transformer, which excels at processing sequential data like language. GPT models are trained on vast amounts of text data, enabling them to learn language patterns, grammar, and context. They function by predicting the next word in a sequence, considering the words that have already been presented. This capability allows them to generate coherent and contextually relevant text responses. The more they are trained with diverse datasets, the better they become at mimicking human-like writing, answering questions, and even engaging in conversations, making them powerful tools in natural language processing.</p>



<p class="wp-block-paragraph">OpenAI <a href="https://openai.com/blog/introducing-gpts">released a new feature</a> where you can take the power of a foundational language model and direct it towards a specific domain. I created a GPT using all of the CheerLights documentation and blog posts that I have written over the past 12 years. I gave it additional instructions about where to find the latest CheerLights color and the fact that we no longer use <a href="https://nothans.com/cheerlights-is-now-a-discord-iot-project" data-type="post" data-id="4174">Twitter/X</a>. GPT-4 still thinks that you can set the color of everyone&#8217;s lights using Twitter (insert sad face emoji), but we are now on a <a href="https://cheerlights.com/discord">Discord Server</a>!</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="667" data-attachment-id="4308" data-permalink="https://nothans.com/cheerlights-iot-expert-gpt/image-7-11" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-7.png?fit=1101%2C980&amp;ssl=1" data-orig-size="1101,980" data-comments-opened="0" data-image-title="image-7" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-7.png?fit=750%2C667&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-7.png?resize=750%2C667&#038;ssl=1" alt="" class="wp-image-4308" style="width:665px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-7.png?resize=1024%2C911&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-7.png?resize=300%2C267&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-7.png?resize=768%2C684&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-7.png?resize=750%2C668&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-7.png?w=1101&amp;ssl=1 1101w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>


<h2 id="how-to-use-the-cheerlights-iot-expert-chatbot" class="wp-block-heading">How to use the CheerLights IoT Expert Chatbot</h2>



<p class="wp-block-paragraph">If you are a ChatGPT Plus subscriber, all you have to do is load up the GPT by clicking this URL: <a href="https://chat.openai.com/g/g-E2zjJXE56-cheerlights-iot-expert" target="_blank" rel="noreferrer noopener">https://chat.openai.com/g/g-E2zjJXE56-cheerlights-iot-expert</a></p>



<p class="wp-block-paragraph">From there, just click on an onboarding prompt or type in a message.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="667" data-attachment-id="4309" data-permalink="https://nothans.com/cheerlights-iot-expert-gpt/image-8-11" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-8.png?fit=1101%2C980&amp;ssl=1" data-orig-size="1101,980" data-comments-opened="0" data-image-title="image-8" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-8.png?fit=750%2C667&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-8.png?resize=750%2C667&#038;ssl=1" alt="" class="wp-image-4309" style="width:664px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-8.png?resize=1024%2C911&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-8.png?resize=300%2C267&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-8.png?resize=768%2C684&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-8.png?resize=750%2C668&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-8.png?w=1101&amp;ssl=1 1101w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>


<h3 id="use-cases" class="wp-block-heading">Use Cases</h3>



<p class="wp-block-paragraph">Try one of these prompts to help inspire how to use the CheerLights IoT Expert chatbot.</p>



<ul class="wp-block-list">
<li>How do I tell which pin is the power pin on a WS2812B LED strip?</li>



<li>I want a sparkle animation for a NeoPixel strip of 16 LEDs.</li>



<li>How do I teach IoT to a group of kids using CheerLights?</li>



<li>How do I show the latest color of CheerLights in my Chrome browser?</li>



<li>Write Python code that retrieves the last 100 color changes and analyzes the data for any patterns.</li>



<li>What are five ideas for a CheerLights display?</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="667" data-attachment-id="4310" data-permalink="https://nothans.com/cheerlights-iot-expert-gpt/image-9-10" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-9.png?fit=1101%2C980&amp;ssl=1" data-orig-size="1101,980" data-comments-opened="0" data-image-title="image-9" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-9.png?fit=750%2C667&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-9.png?resize=750%2C667&#038;ssl=1" alt="" class="wp-image-4310" style="width:602px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-9.png?resize=1024%2C911&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-9.png?resize=300%2C267&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-9.png?resize=768%2C684&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-9.png?resize=750%2C668&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-9.png?w=1101&amp;ssl=1 1101w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>


<h2 id="get-started" class="wp-block-heading">Get Started</h2>



<p class="wp-block-paragraph">Give the <a href="https://chat.openai.com/g/g-E2zjJXE56-cheerlights-iot-expert">CheerLights IoT Expert</a> bot a try. It can get things wrong, but it can also surprise you with something that you never thought of before. If it answers something incorrectly, let me know. I can always make changes and provide up-to-date information to make sure the bot gives the best answer possible. I am looking forward to seeing the creative <a href="https://cheerlights.com/blog">CheerLights</a> displays this season enhanced by ChatGPT. Join the <a href="https://cheerlights.com/discord">CheerLights Discord</a> server and share all of your awesome projects, ideas, and experiences.</p>



<h2 id="bonus-prompt" class="wp-block-heading">Bonus Prompt</h2>



<p class="wp-block-paragraph">I enabled image creation with DALL-E 3, just for fun. You can ask the CheerLights IoT Expert GPT to create images inspired by the latest CheerLights color. Try this prompt: <em>Create an illustration based on the latest CheerLights color, depicting a globe with electric lights.</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="667" data-attachment-id="4311" data-permalink="https://nothans.com/cheerlights-iot-expert-gpt/image-10-9" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-10.png?fit=1101%2C980&amp;ssl=1" data-orig-size="1101,980" data-comments-opened="0" data-image-title="image-10" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-10.png?fit=750%2C667&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-10.png?resize=750%2C667&#038;ssl=1" alt="" class="wp-image-4311" style="width:704px;height:auto" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-10.png?resize=1024%2C911&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-10.png?resize=300%2C267&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-10.png?resize=768%2C684&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-10.png?resize=750%2C668&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/11/image-10.png?w=1101&amp;ssl=1 1101w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/cheerlights-iot-expert-gpt/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4304</post-id>	</item>
		<item>
		<title>Moving away from X/Twitter: CheerLights is now a Discord IoT project</title>
		<link>https://nothans.com/cheerlights-is-now-a-discord-iot-project</link>
					<comments>https://nothans.com/cheerlights-is-now-a-discord-iot-project#comments</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Wed, 25 Oct 2023 14:56:47 +0000</pubDate>
				<category><![CDATA[CheerLights]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[ThingSpeak]]></category>
		<category><![CDATA[cheerlights]]></category>
		<category><![CDATA[internet of things]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[thingspeak]]></category>
		<category><![CDATA[web of things]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=4174</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://cheerlights.com">CheerLights</a> is an Internet of Things (IoT) project that allows people from all over the world to synchronize the color of their lights to the same color, creating a kind of global connectedness.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="750" height="750" data-attachment-id="4176" data-permalink="https://nothans.com/cheerlights-is-now-a-discord-iot-project/image-13-5" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?fit=1024%2C1024&amp;ssl=1" data-orig-size="1024,1024" data-comments-opened="0" data-image-title="CheerLights around the world" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?fit=750%2C750&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?resize=750%2C750&#038;ssl=1" alt="CheerLights as conceptualized by DALL-E 3" class="wp-image-4176" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?w=1024&amp;ssl=1 1024w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?resize=768%2C768&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?resize=530%2C530&amp;ssl=1 530w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?resize=750%2C750&amp;ssl=1 750w, https://i0.wp.com/nothans.com/wp-content/uploads/2023/10/image-13.png?resize=500%2C500&amp;ssl=1 500w" sizes="auto, (max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">CheerLights as conceptualized by DALL-E 3</figcaption></figure>
</div>


<h2 id="twitterx" class="wp-block-heading">Twitter/X</h2>



<p class="wp-block-paragraph">According to my own <a href="https://cheerlights.com/the-cheerlights-origin-story/" data-type="link" data-id="https://cheerlights.com/the-cheerlights-origin-story/">History of the CheerLights Project</a>, I created this project around the idea that anyone on Twitter, ahem, X, could change everyone&#8217;s lights. Twitter made the most sense. It was open and had a global reach. And the bonus was that followers of people who joined the project would see the tweets, which caused some of them to join the project. It was a nice, virtuous circle that fueled the growth of CheerLights year over year. 2022 was the biggest year for the project, just hitting its peak at the same time Twitter started to crack. The API access that we have had for over 12 years was cut off, users moved to decentralized platforms, and X&#8217;s relevance has been in constant question. Don&#8217;t get me wrong. I will always have a special place in my heart for Twitter. I can&#8217;t unwind Twitter&#8217;s on my professional growth over the last 15 years.</p>



<h2 id="discord" class="wp-block-heading">Discord</h2>



<p class="wp-block-paragraph">The CheerLights community got together last year and created a <a href="https://cheerlights.com/discord">Discord server</a> bot and even released the bot&#8217;s source code on <a href="https://github.com/cheerlights/cheerlights-discord-bot" data-type="link" data-id="https://github.com/cheerlights/cheerlights-discord-bot">GitHub</a>. We did this to increase the number of ways to control the CheerLights network, but as it turned out, this is now the primary way to control CheerLights. Hundreds of our users moved over to the Discord server from Twitter/X. In some ways, Discord is way better. I love being able to chat in real-time with other people who are building CheerLights. A lot of people use Discord. And Discord is constantly evolving and keeping up with the trends by adding admin and community features. In other ways, it is not ideal for CheerLights. Discord servers are not easily discoverable. You have to be in the know. It is hard to attract new users since new users don&#8217;t see public mentions of the project. But I am not aiming for perfection. I am aiming for a path forward to keep the project growing. Discord is where we are now. Join us.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" class="youtube-player" width="750" height="422" src="https://www.youtube.com/embed/2E7fsJPm8Zw?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
</div><figcaption class="wp-element-caption">Controlling CheerLights on Discord</figcaption></figure>



<h2 id="how-can-you-help" class="wp-block-heading">How can you help?</h2>



<p class="wp-block-paragraph">Since our Discord server is hidden from public view, we could use your help by making CheerLights discoverable. If you share your project on your blog or social channels, include a link to the Discord server invitation. H</p>



<p class="wp-block-paragraph"><strong>CheerLights Discord Server Invitation Link:</strong> <a href="https://cheerlights.com/discord">https://cheerlights.com/discord</a></p>



<p class="wp-block-paragraph"><em>Thank you to everyone who has helped build and grow this project over the last 12 years. This is always my favorite time of year getting to see the creative ways CheerLights gets used and how it enables learning of core IoT concepts.</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/cheerlights-is-now-a-discord-iot-project/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4174</post-id>	</item>
		<item>
		<title>CheerLights for Halloween</title>
		<link>https://nothans.com/cheerlights-for-halloween-fearlights</link>
					<comments>https://nothans.com/cheerlights-for-halloween-fearlights#respond</comments>
		
		<dc:creator><![CDATA[Hans Scharler]]></dc:creator>
		<pubDate>Tue, 24 Oct 2023 19:27:07 +0000</pubDate>
				<category><![CDATA[CheerLights]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[ThingSpeak]]></category>
		<category><![CDATA[cheerlights]]></category>
		<category><![CDATA[internet of things]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[thingspeak]]></category>
		<category><![CDATA[web of things]]></category>
		<guid isPermaLink="false">https://nothans.com/?p=4170</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Are you ready? Ready for another season of <a href="https://cheerlights.com">CheerLights</a>? I love seeing CheerLights have a longer and longer season as the years go by. Last year, many people made Halloween displays that were connected to the CheerLights project&#8230; <a href="http://fearlights.com">FearLights</a>&#8230; if you will.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://fearlights.com/"><img loading="lazy" decoding="async" width="518" height="142" data-attachment-id="3420" data-permalink="https://nothans.com/cheerlights-for-halloween/cyan-cheerlights-color" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/Cyan-CheerLights-Color.png?fit=518%2C142&amp;ssl=1" data-orig-size="518,142" data-comments-opened="0" data-image-title="Cyan CheerLights Color" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/Cyan-CheerLights-Color.png?fit=518%2C142&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/Cyan-CheerLights-Color.png?resize=518%2C142&amp;ssl=1" alt="" class="wp-image-3420" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/Cyan-CheerLights-Color.png?w=518&amp;ssl=1 518w, https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/Cyan-CheerLights-Color.png?resize=300%2C82&amp;ssl=1 300w" sizes="auto, (max-width: 518px) 100vw, 518px" /></a><figcaption class="wp-element-caption">Cyan FearLights!</figcaption></figure>
</div>


<p class="wp-block-paragraph"><a rel="noreferrer noopener" href="https://cheerlights.com/" target="_blank">CheerLights</a> is a fun way to get started with IoT, microcontrollers, and LED lights. If you know how to make CheerLights work, you can build some other awesome IoT projects. CheerLights is a great project to get people interested in IoT. It&#8217;s often used as an &#8220;Hello, World&#8221; project for the Internet of Things, and what you learn can be applied to other project ideas.</p>



<p class="wp-block-paragraph">To make a Halloween-inspired project, you can take the CheerLights color and illuminate a pumpkin or even a&#8230; skull from <a rel="noreferrer noopener" href="https://shop.pimoroni.com/products/wireless-plasma-kit" target="_blank">Pimoroni</a>.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://twitter.com/mtaylorsherwood/status/1585202938850729985/photo/1"><img loading="lazy" decoding="async" width="1300" height="1726" data-attachment-id="3421" data-permalink="https://nothans.com/cheerlights-for-halloween/image-7" data-orig-file="https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/image-7.png?fit=1300%2C1726&amp;ssl=1" data-orig-size="1300,1726" data-comments-opened="0" data-image-title="CheerLights Halloween Skull" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/image-7.png?fit=750%2C996&amp;ssl=1" src="https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/image-7.png?resize=750%2C996&amp;ssl=1" alt="" class="wp-image-3421" srcset="https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/image-7.png?w=1300&amp;ssl=1 1300w, https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/image-7.png?resize=226%2C300&amp;ssl=1 226w, https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/image-7.png?resize=771%2C1024&amp;ssl=1 771w, https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/image-7.png?resize=768%2C1020&amp;ssl=1 768w, https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/image-7.png?resize=1157%2C1536&amp;ssl=1 1157w, https://i0.wp.com/nothans.com/wp-content/uploads/2022/10/image-7.png?resize=750%2C996&amp;ssl=1 750w" sizes="auto, (max-width: 750px) 100vw, 750px" /></a><figcaption class="wp-element-caption">Pimoroni Wireless Plasma Stick + Glass Skull</figcaption></figure>
</div>


<p class="wp-block-paragraph">Check out other Halloween CheerLights projects over at the CheerLights <a rel="noreferrer noopener" href="https://cheerlights.com/halloween/" target="_blank">blog</a>. Have fun with the idea, build something spooky, and help spread the… <em>fear</em>.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" class="youtube-player" width="750" height="422" src="https://www.youtube.com/embed/2so03Zzy5Fc?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
</div><figcaption class="wp-element-caption">Streaming Lo-Fi inspired by the latest CheerLights Color</figcaption></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://nothans.com/cheerlights-for-halloween-fearlights/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4170</post-id>	</item>
	</channel>
</rss>
