<?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>Making Archives - Digital Urban</title>
	<atom:link href="https://www.digitalurban.org/blog/category/making/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.digitalurban.org/blog/category/making/</link>
	<description>Data, Cities, IoT, Writing, Music and Making Things</description>
	<lastBuildDate>Thu, 13 Nov 2025 12:11:44 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.digitalurban.org/wp-content/uploads/2012/07/Dulogosm-1.png</url>
	<title>Making Archives - Digital Urban</title>
	<link>https://www.digitalurban.org/blog/category/making/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Stepper Motor Linear Data Gauge</title>
		<link>https://www.digitalurban.org/blog/2025/11/13/stepper-motor-linear-data-gauge/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Thu, 13 Nov 2025 12:01:34 +0000</pubDate>
				<category><![CDATA[Making]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[gauge]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[stepper]]></category>
		<category><![CDATA[Weather]]></category>
		<guid isPermaLink="false">https://www.digitalurban.org/?p=170079124</guid>

					<description><![CDATA[<p>The latest upload to the Open Gauges Github is a Linear Gauge, using a timing belt to provide a full 1 metre range for the data visualisation. It uses a...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2025/11/13/stepper-motor-linear-data-gauge/">Stepper Motor Linear Data Gauge</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>The latest upload to the <a href="https://github.com/ucl-casa-ce/Open-Gauges/tree/main">Open Gauges Github</a> is a Linear Gauge, using a timing belt to provide</p>
<div id="attachment_170079126" style="width: 210px" class="wp-caption alignright"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-170079126" class="wp-image-170079126 size-large" src="https://www.digitalurban.org/wp-content/uploads/2025/11/WindStepperLinear-200x1024.png" alt="Linear Stepper Motor Gauge" width="200" height="1024" srcset="https://www.digitalurban.org/wp-content/uploads/2025/11/WindStepperLinear-200x1024.png 200w, https://www.digitalurban.org/wp-content/uploads/2025/11/WindStepperLinear-300x1536.png 300w, https://www.digitalurban.org/wp-content/uploads/2025/11/WindStepperLinear-400x2048.png 400w, https://www.digitalurban.org/wp-content/uploads/2025/11/WindStepperLinear.png 402w" sizes="(max-width: 200px) 100vw, 200px" /><p id="caption-attachment-170079126" class="wp-caption-text">Linear Stepper Motor Gauge</p></div>
<p>a full 1 metre range for the data visualisation. It uses a stepper motor for precise needle movement, and a limit switch for calibration, it can be adapted to any MQTT data feed and any base mount. The example shown uses a 5cm by 10cm peice of wood, cut to 1 metre length and indicates wind speed from 0 to 60 mph.</p>
<p class="p1">The design uses a stepper motor (like the 28BYJ-48) which offers high-precision, 360-degree movement without the jitter or limited range of a standard servo. The limit switch allows the gauge to &#8220;home&#8221; itself on startup, ensuring the pointer always starts at a known zero position.</p>
<p class="p1">The main code &#8211; <span class="s1">WindStepperTimerBeltwithLimitSwitch.ino</span> in the Github has a distance calibration number, adjust for your range.</p>
<p class="p1"><b>Hardware Components</b></p>
<ul class="ul1">
<li class="li1">Arduino-compatible Board: Any board like an Arduino Uno, Nano, or a NodeMCU.</li>
<li class="li1">Stepper Motor: 28BYJ-48 5V stepper motor.</li>
<li class="li1">Stepper Driver: ULN2003 driver board (which often comes with the 28BYJ-48).</li>
<li class="li1">Limit Switch: A small microswitch to detect the pointers zero position.</li>
<li class="li1">Power Supply: USB.</li>
<li class="li1">Timer Belt <a href="https://www.amazon.co.uk/Timing-Pulley-Tensioner-Torsion-Printer/dp/B0C54ZXM88/ref=sxin_15_pa_sp_search_thematic_sspa?content-id=amzn1.sym.0a6bbb1a-ed2d-4392-adfc-40ed1cfcd8e2%3Aamzn1.sym.0a6bbb1a-ed2d-4392-adfc-40ed1cfcd8e2&amp;crid=L07UDXXKCZFX&amp;cv_ct_cx=timing%2Bbelt%2Bgt2&amp;keywords=timing%2Bbelt%2Bgt2&amp;pd_rd_i=B0C54ZXM88&amp;pd_rd_r=12141bbe-35d0-4c0a-8811-d7f399206de4&amp;pd_rd_w=AVwDb&amp;pd_rd_wg=JG5Mx&amp;pf_rd_p=0a6bbb1a-ed2d-4392-adfc-40ed1cfcd8e2&amp;pf_rd_r=H6T6R7VAGD99FGNPH875&amp;qid=1763028887&amp;sbo=RZvfv%2F%2FHxDF%2BO5021pAnSA%3D%3D&amp;sprefix=timer%2Bbelt%2Bgt2%2Caps%2C99&amp;sr=1-5-ad3222ed-9545-4dc8-8dd8-6b2cb5278509-spons&amp;aref=vwr3X339Nm&amp;sp_csd=d2lkZ2V0TmFtZT1zcF9zZWFyY2hfdGhlbWF0aWM&amp;th=1"><span class="s2">GT2 Timer Belt</span></a></li>
</ul>
<p>It is made to be as simple to build/power as possible but also adatable for a number of senarios.</p>
<p>The github provides the mount for the stepper motor, the pointer (which also joins together the timing belt) the limit switch and the end mount for the pulley. These allow the gauge to be adapted to any size required.</p>
<p>At the moment the gauge is sitting on the wall in our lounge and it has become one of our most used guages. The data updates every minute to show the maximum wind gust and due to the nature of the stepper motor, it provides a smooth movement, almost replicating the gust of wind.</p>
<p>&nbsp;</p>
<p>The post <a href="https://www.digitalurban.org/blog/2025/11/13/stepper-motor-linear-data-gauge/">Stepper Motor Linear Data Gauge</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ships Lamp Wind Speed Gauge</title>
		<link>https://www.digitalurban.org/blog/2025/11/12/ships-lamp-wind-speed-gauge/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Wed, 12 Nov 2025 11:39:29 +0000</pubDate>
				<category><![CDATA[Making]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[micropytho]]></category>
		<category><![CDATA[physical objects]]></category>
		<guid isPermaLink="false">https://www.digitalurban.org/?p=170079118</guid>

					<description><![CDATA[<p>Our MicroPython project turns a strip of NeoPixel LEDs into a “ship&#8217;s lamp&#8221; style wind speed gauge. It connects to an MQTT broker to receive real-time wind speed data and...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2025/11/12/ships-lamp-wind-speed-gauge/">Ships Lamp Wind Speed Gauge</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Our MicroPython project turns a strip of NeoPixel LEDs into a “ship&#8217;s lamp&#8221; style wind speed gauge. It connects to an MQTT broker to receive real-time wind speed data and translates it into a flickering, color-coded light.</p>
<p>The light simulates an oil lamp by staying &#8220;steady&#8221; for a random period and then &#8220;flickering&#8221; for a short time by rapidly dimming and brightening &#8211; the flicker speed changes acording to the wind speed. The full code and details are available on <a href="https://github.com/ucl-casa-ce/Open-Gauges">Github as part of the ever growing Open Gauges Project</a>.</p>
<div id="attachment_170079120" style="width: 1034px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-170079120" class="wp-image-170079120 size-large" src="https://www.digitalurban.org/wp-content/uploads/2025/11/shipslamp2025-1024x768.jpeg" alt="Ships Lamp" width="1024" height="768" srcset="https://www.digitalurban.org/wp-content/uploads/2025/11/shipslamp2025-1024x768.jpeg 1024w, https://www.digitalurban.org/wp-content/uploads/2025/11/shipslamp2025-300x225.jpeg 300w, https://www.digitalurban.org/wp-content/uploads/2025/11/shipslamp2025-768x576.jpeg 768w, https://www.digitalurban.org/wp-content/uploads/2025/11/shipslamp2025-1536x1152.jpeg 1536w, https://www.digitalurban.org/wp-content/uploads/2025/11/shipslamp2025.jpeg 2016w" sizes="(max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-170079120" class="wp-caption-text">Ships Lamp</p></div>
<h2>Features</h2>
<ul>
<li><strong>Real-time Data:</strong> Connects to an MQTT broker to subscribe to a wind speed topic.</li>
<li><strong>Weather Map Gradient:</strong> Displays wind speed using an intuitive &#8220;weather map&#8221; color gradient:
<ul>
<li><strong>0 mph:</strong> Off (Black)</li>
<li><strong>1-10 mph:</strong> Solid Green</li>
<li><strong>10-20 mph:</strong> Fades from Green → Yellow</li>
<li><strong>20-30 mph:</strong> Fades from Yellow → Orange</li>
<li><strong>30-40 mph:</strong> Fades from Orange → Red</li>
<li><strong>40+ mph:</strong> Solid Red</li>
</ul>
</li>
<li><strong>Realistic Flicker Effect:</strong> The light doesn&#8217;t just stay solid; it cycles between a &#8220;steady&#8221; phase (10-60s) and a &#8220;flicker&#8221; phase (5-15s) to simulate a real lamp.</li>
<li><strong>Asynchronous &amp; Resilient:</strong> Built using <code>uasyncio</code> and <code>mqtt_as</code>. The <code>mqtt_as</code> library automatically handles and recovers from WiFi or MQTT broker disconnections, re-subscribing to topics as needed.</li>
<li><strong>Hardware Watchdog:</strong> Uses the Pico&#8217;s built-in <code>machine.WDT</code> (Watchdog Timer) to automatically reboot the device <em>only</em> if the main code loop freezes, ensuring high reliability. (This replaces the old 60-minute timer).</li>
<li><strong>Status LEDs:</strong> Provides a heartbeat flash on one LED and a WiFi status indicator on another.</li>
</ul>
<h2>Hardware Requirements<strong style="font-size: 16px;"><img decoding="async" style="font-weight: 400;" src="https://github.com/ucl-casa-ce/Open-Gauges/raw/main/Contributed/ShipsLamp/shipslamp.jpeg" alt="MQTT Ships Lamp" /></strong></h2>
<ul>
<li><strong>Raspberry Pi Pico W:</strong> (or any Pico with a WiFi-capable board).</li>
<li><strong>NeoPixel LED Strip:</strong> The code is configured for a strip, but can be any WS812B/NeoPixel compatible LEDs.</li>
<li><strong>Power Supply:</strong> A sufficient power supply for your LED strip (a strip of 60 LEDs can draw several amps at full brightness).</li>
<li><strong>A Ships Lamp (old or new).</strong></li>
</ul>
<h3>Default Pinout (Pico W)</h3>
<ul>
<li><strong>NeoPixel Data:</strong> <code>GP15</code></li>
<li><strong>Blue LED (Heartbeat):</strong> <code>blue_led</code> (defined in <code>config.py</code>, often the onboard LED).</li>
<li><strong>WiFi LED:</strong> <code>wifi_led</code> (defined in <code>config.py</code>).</li>
</ul>
<h2>Software &amp; Dependencies</h2>
<p>This project relies on a few key MicroPython libraries that you must have on your Pico:</p>
<ol>
<li><strong><code>neopixel.py</code>:</strong> The standard Adafruit NeoPixel library for MicroPython.</li>
<li><strong><code>mqtt_as.py</code>:</strong> A robust, asynchronous MQTT client. You can find it <a href="https://github.com/peterhinch/micropython-mqtt/blob/master/mqtt_as/mqtt_as.py" target="_blank" rel="noopener noreferrer">here</a>.</li>
<li><strong><code>config.py</code>:</strong> A file you must create to hold your credentials and pin definitions.</li>
</ol>
<h2>Configuration</h2>
<p>You <strong>must</strong> create a <code>config.py</code> file in the root of your Pico&#8217;s filesystem. This file should contain:</p>
<ol>
<li>Your WiFi and MQTT broker credentials.</li>
<li>Definitions for your <code>wifi_led</code> and <code>blue_led</code>.</li>
</ol>
<p>The <code>mqtt_as</code> library expects the <code>config.py</code> to contain a <code>config</code> dictionary.</p>
<p><strong>Example <code>config.py</code>:</strong></p>
<pre class="wp-block-code"><code># config.py
from machine import Pin

# --- WiFi Configuration ---
config['wifi_led'] = Pin("WL_GPIO0", Pin.OUT) # Onboard LED on Pico W
config['ssid'] = 'YOUR_WIFI_SSID'
config['wifi_pw'] = 'YOUR_WWIFI_PASSWORD'

# --- MQTT Configuration ---
# This example is for the open broker mqtt.cetools.org
config['server'] = 'mqtt.cetools.org'
config['port'] = 1884
config['client_id'] = 'pico_ships_lamp' # Or any unique ID

# --- Optional: For Secured Brokers ---
# If your broker requires a username and password, add these lines:
# config['user'] = 'YOUR_MQTT_USER'
# config['password'] = 'YOUR_MQTT_PASSWORD'

# --- Other Hardware ---
# This is for the heartbeat LED
blue_led = Pin(10, Pin.OUT) # Example: an external LED on GP10
</code></pre>
<h2>Running the Project</h2>
<ol>
<li>Upload <code>main.py</code>, <code>neopixel.py</code>, <code>mqtt_as.py</code>, and your <code>config.py</code> to your Raspberry Pi Pico.</li>
<li>Reset the device.</li>
<li>The device will automatically connect to your WiFi and MQTT broker.</li>
<li>It will subscribe to the topic <code>personal/ucfnaps/downhamweather/windSpeed_mph</code>.</li>
<li>As messages are published to that topic, the ship&#8217;s lamp will spring to life!</li>
</ol>
<h2>Customizing</h2>
<ul>
<li><strong>LED Count:</strong> Change the <code>numpix</code> variable at the top of <code>main.py</code> to match your strip.</li>
<li><strong>Data Pin:</strong> Change the <code>15</code> in <code>pixels = Neopixel(numpix, 0, 15, "GRB")</code> to match your data pin.</li>
<li><strong>MQTT Topic:</strong> Change the a topic name in the <code>conn_han</code> function to subscribe to your own data source.</li>
</ul>
<p>The post <a href="https://www.digitalurban.org/blog/2025/11/12/ships-lamp-wind-speed-gauge/">Ships Lamp Wind Speed Gauge</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Turn Any Device into a Literary Clock with our MQTT Feed</title>
		<link>https://www.digitalurban.org/blog/2024/07/15/turning-any-device-into-a-literary-clock-with-mqtt/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Mon, 15 Jul 2024 13:40:48 +0000</pubDate>
				<category><![CDATA[Making]]></category>
		<category><![CDATA[clock]]></category>
		<category><![CDATA[literacy clock]]></category>
		<category><![CDATA[mqtt]]></category>
		<category><![CDATA[time quote clock]]></category>
		<guid isPermaLink="false">https://www.digitalurban.org/?p=7847</guid>

					<description><![CDATA[<p>The Concept of the Literary Clock A literary clock is a unique fusion of literature and timekeeping. Every minute of the day is represented by a corresponding quote from a...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2024/07/15/turning-any-device-into-a-literary-clock-with-mqtt/">Turn Any Device into a Literary Clock with our MQTT Feed</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>The Concept of the Literary Clock</strong></p>



<p>A literary clock is a unique fusion of literature and timekeeping. Every minute of the day is represented by a corresponding quote from a literary work, providing not just the time, but a nugget of wisdom, humor, or beauty from the world of books. This idea transforms the mundane act of checking the time into a delightful literary experience. The initial concept, as outlined by the original <a href="https://www.literaryclock.com/posts/Lt0_Blueprint">Literary Clock Project</a>, involves creating a clock that displays quotes from various literary works for every minute of the day. This concept not only appeals to book lovers but also serves as an artistic and educational piece, bringing literature into everyday life in a novel way. For example, as we type this the time is twenty one minutes to five and the quote from the database, including the book name is:</p>



<figure class="wp-block-pullquote"><blockquote><p>&nbsp;</p><cite>&#8220;I was told that in his vest pocket he kept a chronometer instead of a watch. If someone asked him what time it was, he would say, &#8220;&#8221;<strong>A minute and twenty-one seconds to five</strong>.&#8221;&#8221;&#8221; Book: The Collected Stories</cite></blockquote></figure>



<p><strong>Crowdsourcing the Literary Database</strong></p>



<p>An essential aspect of this project was the crowdsourcing of the literary database. The <a href="https://www.literaryclock.com/posts/Lt1_Crowdsourcing">Literary Clock Project</a> engaged a global community of literature enthusiasts to contribute quotes for every minute of the day. This collaborative effort created a diverse and rich collection of quotes, encompassing a wide range of genres, periods, and authors. Contributors from around the world submitted their favourite passages, transforming this project into a communal celebration of literature. The concept was taken a step further by tjaap who cleaned up the database and ported it onto a Kindle, <a href="https://www.instructables.com/Literary-Clock-Made-From-E-reader/">complete with a full instructable</a> on how to build you own.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="637" src="https://www.digitalurban.org/wp-content/uploads/2024/07/Kindle.webp" alt="" class="wp-image-7850" srcset="https://www.digitalurban.org/wp-content/uploads/2024/07/Kindle.webp 1024w, https://www.digitalurban.org/wp-content/uploads/2024/07/Kindle-300x187.webp 300w, https://www.digitalurban.org/wp-content/uploads/2024/07/Kindle-768x478.webp 768w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The Kindle Literary Clock by tjapp</figcaption></figure>



<p><strong>Porting to MQTT</strong></p>



<p>MQTT (Message Queuing Telemetry Transport) is a lightweight messaging protocol designed for small sensors and mobile devices optimized for high-latency or unreliable networks. It’s perfect for the Internet of Things (IoT) applications where bandwidth and battery power are at a premium. It is also good for transmitting short text messages to display across multiple devices at the same time, as long as a device is connected to an MQTT broker, it will automatically display messages as they arrive.</p>



<p>As such, as have created a Python script to read the database and publish the time quotes every minute to our MQTT broker on the following address:<strong> /personal/ucfnap/timequote</strong> (its a little but like tuning a radio, but in the case of MQTT, subscribing to topics).</p>



<p><strong>How It Works:</strong></p>



<p>1. <strong>Data Collection</strong>: We are using the extensive CSV file containing literary quotes provided by the Kindle Literarty Clock project, where each quote is tagged with a specific minute of the day. To make it work with our script we tidied things up a little.</p>



<p>2. <strong>Publishing</strong>: This CSV is processed and published via the MQTT feed. Each minute, a new message is sent out containing the current time and the corresponding quote.</p>



<p>3. <strong>Subscription</strong>: Any device can subscribe to this MQTT feed to receive the quotes in real-time. This could be an e-ink screen, a smart display, or even a mobile application &#8211; ie at 10.47 a device would receive the following message:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>10.07 am</strong>: In a meeting with Rod, Momo and Guy. We are rehearsing the final for the third time, with Rod and Guy taking the parts of the clients, when Rod&#8217;s secretary, Lorraine, bursts in. Book: I Don&#8217;t Know How She Does It</p>
</blockquote>



<p><strong>Applications</strong></p>



<p><strong>E-Ink Screens</strong></p>



<p>Perhaps one of the most elegant implementations of this concept is using e-ink screens. E-ink displays are known for their paper-like readability and low power consumption, making them perfect for a literary clock. For an example of this, you can check out our detailed guide on setting up an e-ink screen with MQTT via our previous project THE: Time Headlines and Environmental Information <a href="https://www.digitalurban.org/blog/2020/04/10/the/">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="560" src="https://www.digitalurban.org/wp-content/uploads/2024/07/timequoteclock-1024x560.png" alt="Literacy Clock using MQTY" class="wp-image-7856" srcset="https://www.digitalurban.org/wp-content/uploads/2024/07/timequoteclock-1024x560.png 1024w, https://www.digitalurban.org/wp-content/uploads/2024/07/timequoteclock-300x164.png 300w, https://www.digitalurban.org/wp-content/uploads/2024/07/timequoteclock-768x420.png 768w, https://www.digitalurban.org/wp-content/uploads/2024/07/timequoteclock-1536x840.png 1536w, https://www.digitalurban.org/wp-content/uploads/2024/07/timequoteclock-2048x1120.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Literary Clock using MQTT</figcaption></figure>



<p><strong>Smart Displays and Mobile Apps</strong></p>



<p>Beyond e-ink screens, this feed can be integrated into various smart displays and mobile applications. For example, we have intergrated it into our Home Assistant Dashboard, updating the time with a quote every minute. You could also add it to a HUB75 LED Matrix &#8211; below is our example of using an LED Matrix as a general data feed, but by simply changing the MQTT feed, it transforms into a Literary Clock.</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" title="Hub75 Matrix with MQTT and a Pimoroni Pi PicoW Interstate 75w" width="1080" height="608" src="https://www.youtube.com/embed/kG3OStmfXLk?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></figure>



<p>&nbsp;</p>



<p><strong>Setting Up Your Literary Clock</strong></p>



<p>Setting up your device is easy &#8211;</p>



<p>1. <strong>Choose Your Device</strong>: Select a device that can run an MQTT client. This could be an e-ink screen, a Raspberry Pi with a display, or a smartphone.</p>



<p>2. <strong>Install an MQTT Libary</strong>: There are numerous MQTT libraries available, we mainly use Paho.</p>



<p><p>3. <strong>Subscribe to the Feed</strong>: Point your client to the feed /personal/ucfnap/timequote&nbsp;</p>
<p>Configure your client to display the received messages. Our open MQTT Broker is mqtt.cetools.org on Port 1883</p></p>



<p></p>



<p>Of course you may not want to bother with Raspberry Pi&#8217;s or other about with MQTT, or hack a Kindle &#8211; in which case, for those looking for a ready-made commercial version, check out the <a href="https://www.authorclock.com/">Author Clock</a>.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="457" src="https://www.digitalurban.org/wp-content/uploads/2024/07/author-clock.png" alt="" class="wp-image-7851" srcset="https://www.digitalurban.org/wp-content/uploads/2024/07/author-clock.png 800w, https://www.digitalurban.org/wp-content/uploads/2024/07/author-clock-300x171.png 300w, https://www.digitalurban.org/wp-content/uploads/2024/07/author-clock-768x439.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><figcaption class="wp-element-caption">The Rather Lovely Author Clock</figcaption></figure>



<p><p>The Author Clock is a beautifully designed literary clock that comes pre-loaded with thousands of quotes from a wide array of literary works. It’s an excellent choice for those who want to enjoy the literary clock experience without the need for a DIY setup.</p> <p>With our MQTT messages, any device can now be simply converted into a Literary Clock.</p></p>
<p>The post <a href="https://www.digitalurban.org/blog/2024/07/15/turning-any-device-into-a-literary-clock-with-mqtt/">Turn Any Device into a Literary Clock with our MQTT Feed</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Make a Scrolling Hub75 Matrix Display using a Pimoroni Interstate75W and MQTT</title>
		<link>https://www.digitalurban.org/blog/2024/07/12/creating-an-scrolling-hub75-matrix-display-with-pimoroni-interstate75w-and-mqtt/</link>
					<comments>https://www.digitalurban.org/blog/2024/07/12/creating-an-scrolling-hub75-matrix-display-with-pimoroni-interstate75w-and-mqtt/#comments</comments>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Fri, 12 Jul 2024 09:30:06 +0000</pubDate>
				<category><![CDATA[Making]]></category>
		<category><![CDATA[Posts]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[home assistant]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[making]]></category>
		<category><![CDATA[MQTT Scroller]]></category>
		<guid isPermaLink="false">https://www.digitalurban.org/?p=7832</guid>

					<description><![CDATA[<p>The post <a href="https://www.digitalurban.org/blog/2024/07/12/creating-an-scrolling-hub75-matrix-display-with-pimoroni-interstate75w-and-mqtt/">Make a Scrolling Hub75 Matrix Display using a Pimoroni Interstate75W and MQTT</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div id="fws_69709a69a3bc9"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row top-level"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>There are many tutorials online on using an LED Matrix to display data—many of them require wiring up a screen, external power supplies, or flashing boards. We wanted to highlight a slightly more accessible way to get an LED Matrix—in our case, a Hub 75, 32&#215;64 pixel up and running using an <a href="https://shop.pimoroni.com/products/interstate-75-w?variant=40453881299027">Interstate75W from Pimoroni.</a> The benefit of the Interstate is that it plugs indirectly into the matrix and can power a single screen directly from the board.</p>
<div id="attachment_7838" style="width: 310px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7838" class="size-medium wp-image-7838" src="https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-300x300.webp" alt="Interstate75W " width="300" height="300" srcset="https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-300x300.webp 300w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-1024x1024.webp 1024w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-150x150.webp 150w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-768x768.webp 768w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-140x140.webp 140w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-100x100.webp 100w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-500x500.webp 500w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-350x350.webp 350w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-1000x1000.webp 1000w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center-800x800.webp 800w, https://www.digitalurban.org/wp-content/uploads/2024/07/interstate-75-w-2_1500x1500_crop_center.webp 1500w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p id="caption-attachment-7838" class="wp-caption-text">Interstate75W</p></div>
<p>We wanted a way to display any data we wanted on the screen with the screen lighting up and data scrolling up as it arrives and then turning off. To use this we use MQTT to load our data (a test feed is included in the scripts &#8211; which displays Time, News and Environmental Information) &#8211; see below for a demo:</p>
<p>&nbsp;</p>
<div style="text-align: center;"><iframe loading="lazy" src="https://www.youtube.com/embed/kG3OStmfXLk" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></div>
<p>We also incorporate manual brightness control and reconnecting for the MQTT for message handling, making it easy to update the display from anywhere. Setting up your own MQTT is beyond this post, but its easier than you may think and once you have one it can be used to display any data, from external feeds such as weather apis through to data from systems such as Home Assistant. Edit April 2025, we have added additional files to allow use with the new <a href="https://shop.pimoroni.com/products/interstate-75-w?variant=55006518411643">Pimoroni Intersate Starter Kit 128&#215;128 Matrix</a>, allowing a larger format screen, as pictured below.</p>
<div id="attachment_7914" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7914" class="wp-image-7914 size-large" src="https://www.digitalurban.org/wp-content/uploads/2024/07/Matrix128x128-1024x576.jpeg" alt="Matrix128x128" width="1024" height="576" srcset="https://www.digitalurban.org/wp-content/uploads/2024/07/Matrix128x128-1024x576.jpeg 1024w, https://www.digitalurban.org/wp-content/uploads/2024/07/Matrix128x128-300x169.jpeg 300w, https://www.digitalurban.org/wp-content/uploads/2024/07/Matrix128x128-768x432.jpeg 768w, https://www.digitalurban.org/wp-content/uploads/2024/07/Matrix128x128-1536x864.jpeg 1536w, https://www.digitalurban.org/wp-content/uploads/2024/07/Matrix128x128-2048x1152.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-7914" class="wp-caption-text">Matrix128x128</p></div>
<h3>Features</h3>
<ul>
<li><strong>Scrolling Text Messages:</strong> Display messages that scroll across the HUB75 LED matrix.</li>
<li><strong>Manual Brightness Control:</strong> Adjust the brightness of the display manually.</li>
<li><strong>MQTT Integration:</strong> Receive and display messages via MQTT.</li>
</ul>
<h3>Hardware Requirements</h3>
<p>To get started, you&#8217;ll need the following hardware:</p>
<ul>
<li><a href="https://shop.pimoroni.com/products/interstate-75-w?variant=40453881299027">Pimoroni Interstate75W</a></li>
<li><a href="https://shop.pimoroni.com/products/rgb-led-matrix-panel?variant=42312764298">A HUB75 LED matrix display</a></li>
<li><a href="https://www.printables.com/model/939763-hub75-display-case-for-the-interstate75w-32x64-4mm">3D Printed Case</a></li>
<li>MQTT broker (local or cloud-based) &#8211; we provide our own feed so you can test the set up.</li>
</ul>
<p>There is also room in the 3D printed case to attach a cloth cover, acting a diffuser (a grey t-shirt works well, cut to size):</p>
<div id="attachment_7879" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7879" class="wp-image-7879 size-large" src="https://www.digitalurban.org/wp-content/uploads/2024/07/Photoroom_20250128_104636-1024x576.png" alt="LED Matrix with Cloth Cover" width="1024" height="576" srcset="https://www.digitalurban.org/wp-content/uploads/2024/07/Photoroom_20250128_104636-1024x576.png 1024w, https://www.digitalurban.org/wp-content/uploads/2024/07/Photoroom_20250128_104636-300x169.png 300w, https://www.digitalurban.org/wp-content/uploads/2024/07/Photoroom_20250128_104636-768x432.png 768w, https://www.digitalurban.org/wp-content/uploads/2024/07/Photoroom_20250128_104636-1536x864.png 1536w, https://www.digitalurban.org/wp-content/uploads/2024/07/Photoroom_20250128_104636-2048x1152.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-7879" class="wp-caption-text">LED Matrix with Cloth Cover</p></div>
<h2>Software Requirements</h2>
<p>You&#8217;ll also need the following software &#8211; all available from our GitHub</p>
<ul>
<li>MicroPython</li>
<li>Required MicroPython libraries:
<ul>
<li><code>interstate75</code></li>
<li><code>mqtt_as</code></li>
<li><code>uasyncio</code></li>
</ul>
</li>
</ul>
<h3>Setup</h3>
<h3>1. Clone the Repository</h3>
<p>First, clone the project repository from GitHub, or just download the files directly:</p>
<p>&#8220;`sh<br />
git clone <a href="https://github.com/digitalurban/Interstate75W_MQTT_Scroller">https://github.com/digitalurban/Interstate75W_MQTT_Scroller</a><br />
cd interstate75w-mqtt-display<br />
&#8220;`</p>
<h3>2. Upload the Code</h3>
<p>Next, upload the code to your microcontroller. You can use tools like Thonny or ampy to do this.</p>
<h3>3. Configure WiFi and MQTT</h3>
<p>Update the <code>config.py</code> file with your WiFi credentials, the MQTT details can also be updated if you have your own server, if not then leave them for our demo feed.</p>
<p>&#8220;`python<br />
config = {<br />
&#8216;ssid&#8217;: &#8216;your_wifi_ssid&#8217;,<br />
&#8216;wifi_pw&#8217;: &#8216;your_wifi_password&#8217;,<br />
&#8216;server&#8217;: &#8216;mqtt_broker_address&#8217;,<br />
&#8216;user&#8217;: &#8216;mqtt_user&#8217;,<br />
&#8216;password&#8217;: &#8216;mqtt_password&#8217;,<br />
&#8216;port&#8217;: 1883,<br />
&#8216;keepalive&#8217;: 60,<br />
}<br />
&#8220;`</p>
<h3>Usage</h3>
<h3>Run the Script</h3>
<p>The script will automatically connect to WiFi and the MQTT broker, then start displaying messages &#8211; our MQQ feed displays messages approximatly every 3 minutes.</p>
<h3>Constants and Initial Setup</h3>
<p>The script defines constants for controlling the scrolling text speed, how long the screen says on for after displaying the message and brightness settings. It also initializes the Interstate75W object:</p>
<h4>Constants for controlling scrolling text</h4>
<p>BACKGROUND_COLOUR = (0, 0, 0) # Black background to turn off the screen<br />
HOLD_TIME = 2.0<br />
BLANK_SCREEN_TIME = 10.0<br />
BUFFER_PIXELS = 2 # Increased buffer to ensure full scroll off<br />
SCROLL_SPEED_LEVEL = 8 # Set the desired scrolling speed level (1 to 10)<br />
SCROLL_SPEED = 1 / SCROLL_SPEED_LEVEL # Convert to a delay in seconds</p>
<h4>Brightness settings</h4>
<p>brightness = 50 # Initial brightness (0 to 100)</p>
<p>Do let us know if you make one &#8211; we would love to see images of your own set up and we hope this made it a little easier for anyone new looking to run an LED matrix using MQTT.</p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a href="https://www.digitalurban.org/blog/2024/07/12/creating-an-scrolling-hub75-matrix-display-with-pimoroni-interstate75w-and-mqtt/">Make a Scrolling Hub75 Matrix Display using a Pimoroni Interstate75W and MQTT</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digitalurban.org/blog/2024/07/12/creating-an-scrolling-hub75-matrix-display-with-pimoroni-interstate75w-and-mqtt/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Creating Art Like Weather Forecast Images with DALL·E 3 and API Data</title>
		<link>https://www.digitalurban.org/blog/2024/04/27/creating-art-like-weather-forecast-images-with-dall%c2%b7e-3-and-api-data/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Sat, 27 Apr 2024 14:12:43 +0000</pubDate>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Making]]></category>
		<category><![CDATA[Weather]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Dall-E]]></category>
		<category><![CDATA[FrameTV]]></category>
		<category><![CDATA[MetOffice]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://connected-environments.org/?p=7565</guid>

					<description><![CDATA[<p>The post <a href="https://www.digitalurban.org/blog/2024/04/27/creating-art-like-weather-forecast-images-with-dall%c2%b7e-3-and-api-data/">Creating Art Like Weather Forecast Images with DALL·E 3 and API Data</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div id="fws_69709a69aa3b7"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<h2>Introduction</h2>
<p>The Met Office, as the national meteorological service for the United Kingdom, provides valuable weather data through its API called DataPoint. This API caters to a wide range of users, including professionals, scientists, students, and amateur developers. One of its notable features is the availability of text-based regional weather forecasts.</p>
<p>However, traditional text-to-image systems often struggle with accurately representing descriptive language. Users often find themselves navigating the complexities of prompt engineering to achieve their desired visual output. However, things are rapidly chaning with the use of AI and OpenAI’s latest release, DALL·E 3, simplifies this process by generating images that align with the provided text.</p>
<p>In this blog post, we’ll explore how to combine Met Office weather forecasts with DALL·E 3 via its API using Python. Our goal? To create captivating landscape imagery that reflects the weather conditions described in the forecast. Our images are then uploaded to our webserver, using FTP for viewing online. If you simply want to create an image, then you can leave the FTP section out.</p>
<h2>The Workflow</h2>
<ol>
<li><strong>Met Office Data Retrieval</strong>:
<ul>
<li>We fetch the weather forecast data from the Met Office DataPoint API. Specifically, we focus on today’s weather conditions. We are using the UK metoffice, but it could be any weather api, from any country, that returns forecast text.</li>
</ul>
</li>
<li><strong>Creating the Image Prompt</strong>:
<ul>
<li>We construct an image prompt that encapsulates the essence of the weather. Our prompt includes the landscape type (e.g., “rural Norfolk landscape”) and the specific weather details obtained from the Met Office. The landscape type can be edited accordingly</li>
</ul>
</li>
<li><strong>DALL·E 3 Image Generation</strong>:
<ul>
<li>Leveraging OpenAI’s DALL·E 3 model, we generate an image based on the provided prompt. The image should realistically depict cloud formations, sunlight, precipitation, and wind effects, all while capturing the mood suggested by the weather.</li>
</ul>
</li>
<li><strong>FTP Upload</strong>:
<ul>
<li>Finally, we upload the generated image to an FTP server for public access.</li>
</ul>
</li>
</ol>
<p>We run the script every 12 hours (ours runs on a Raspberry Pi) with the images archived on the websever &#8211; the gallery below shows some of the images from the last few months:</p>
	</div>
</div>




	<div class="wpb_gallery wpb_content_element clearfix">
		<div class="wpb_wrapper"><div class="wpb_gallery_slidesnectarslider_style" data-onclick="link_no" data-interval="5"><div class="nectar-slider-wrap" style="height: 720px" data-flexible-height="" data-overall_style="classic" data-button-styling="btn_with_count" data-fullscreen="false"  data-full-width="false" data-parallax="false"  id="ns-id-69709a69ae1d9"><div class="swiper-container" style="height: 720px"  data-loop="true" data-height="720" data-bullets="" data-bullet_style="see_through" data-arrows="true" data-desktop-swipe="true" data-settings=""><div class="swiper-wrapper"><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240122120033.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240121120026.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240120120024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240119120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240118120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240113120022.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240113180024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240114060028.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240114120027.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240114180024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240115060035.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240115120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240116120025.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240117120024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240113060024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240112180032.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240112120026.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240112060026.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240111180025.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240111120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240111060031.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240110180025.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240110120034.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240110060030.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240109180026.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240109120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240109060027.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240108180023.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240108120024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2023/12/image.jpeg_20231216122052.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--></div><a href="" class="slider-prev"><i class="icon-salient-left-arrow"></i> <div class="slide-count"> <span class="slide-current">1</span> <i class="icon-salient-right-line"></i> <span class="slide-total"></span> </div> </a>
			     		<a href="" class="slider-next"><i class="icon-salient-right-arrow"></i> <div class="slide-count"> <span class="slide-current">1</span> <i class="icon-salient-right-line"></i> <span class="slide-total"></span> </div> </a><div class="nectar-slider-loading"></div></div></div></div>
		</div> 
	</div> 
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>The full code can be seen below, with the latest version available via our GitHub repository.</p>
	</div>
</div>




<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<pre class="EnlighterJSRAW" data-enlighter-language="generic"># Import necessary libraries
import ftplib
import requests
from PIL import Image
import io
from bs4 import BeautifulSoup
from datetime import datetime

# Get Met Office Data and Strip Today/Tonight Text
url = 'http://datapoint.metoffice.gov.uk/public/data/txt/wxfcs/regionalforecast/xml/512?key=YOURMETOFFICEAPIKEY'
document = requests.get(url)
soup = BeautifulSoup(document.content, "lxml-xml")

# Extract today's weather forecast
todayraw = soup.find_all("Paragraph", attrs={'title': 'Today:'})
todaystr = str(todayraw)
today = (todaystr.replace('[&lt;Paragraph title="Today:"&gt;', '').replace('&lt;/Paragraph&gt;', '').replace(']', ''))

# Set up OpenAI API key
from openai import OpenAI
client = OpenAI(api_key='YourOpenAIAPIKey')

# FTP server details
ftp_server = 'YourFTPServer'
ftp_username = 'FTPUserName'
ftp_password = 'FTPPassword'

# Specify the type of Norfolk landscape (e.g., rural, coastal, urban)
landscape_type = "rural Norfolk landscape"  # Change this as per your preference

# Create the image prompt
image_prompt = (
    f"A photorealistic single, cohesive scene image of a {landscape_type}, showcasing the following weather conditions: {today}. "
    "The image should realistically depict elements like cloud formations, sunlight or lack thereof, any precipitation, and wind effects. "
    "It should convey the atmosphere and mood suggested by the weather, with appropriate lighting and color tones. No numerical data or text should be included, just a pure visual representation of the weather in the landscape."
)

# Generate an image using OpenAI's DALL·E
def generate_image(prompt):
    response = client.images.generate(prompt=prompt, n=1, model="dall-e-3", quality="standard", style="vivid", size="1792x1024")
    image_url = response.data[0].url
    return image_url

# Function to generate a datestamp
def get_datestamp():
    return datetime.now().strftime("%Y%m%d%H%M%S")

# Modified FTP upload function
def upload_to_ftp(image_url, remote_path):
    with ftplib.FTP(ftp_server) as ftp:
        ftp.login(user=ftp_username, passwd=ftp_password)
        response = requests.get(image_url)
        image = Image.open(io.BytesIO(response.content))
        datestamp = get_datestamp()
        original_image = io.BytesIO()
        image.save(original_image, format='JPEG')
        original_image.seek(0)
        ftp.storbinary(f'STOR {remote_path}_{datestamp}.jpeg', original_image)
        resized_image = image.resize((1792, 1024))
        jpeg_image = io.BytesIO()
        resized_image.save(jpeg_image, format='JPEG')
        jpeg_image.seek(0)
        ftp.storbinary('STOR public_html/image.jpeg', jpeg_image)
        resized_image = image.resize((800, 480))
        jpeg_image = io.BytesIO()
        resized_image.save(jpeg_image, format='JPEG')
        jpeg_image.seek(0)
        ftp.storbinary('STOR public_html/image_eink.jpeg', jpeg_image)

# Generate the image and upload it
image_url = generate_image(image_prompt)
upload_to_ftp(image_url, 'public_html/image.jpeg')
</pre>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_69709a69ede0c"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<h3>Breaking down the steps in the code &#8211;</h3>
<ol>
<li><strong>Importing Libraries</strong>: We start by importing necessary Python libraries for HTTP requests, image processing, FTP interaction, and data parsing.</li>
<li><strong>Fetching Weather Data</strong>: The script retrieves weather data from the Met Office using an API key. It extracts relevant information using BeautifulSoup and cleans up the output to get the weather forecast for today.</li>
<li><strong>OpenAI API Key</strong>: The OpenAI API key is set up to use the DALL·E model for image generation.</li>
<li><strong>FTP Server Details</strong>: FTP server credentials (server address, username, and password) are provided for image uploads.</li>
<li><strong>Weather Details and Landscape Type</strong>: The weather description obtained earlier is stored in weather_details . A landscape type (e.g., “rural Norfolk landscape”) is specified.</li>
<li><strong>Image Prompt Creation</strong>: The image_prompt  is constructed by combining weather details and landscape type. It describes the desired image.</li>
<li><strong>Image Generation with DALL·E</strong>: The  generatrate_image function uses DALL·E to create and return an image based on the prompt.</li>
<li><strong>Datestamp Generation</strong>: A datestamp is generated for archiving purposes.</li>
<li><strong>FTP Image Upload</strong>: The upload_to_ftp function connects to the FTP server, downloads the generated image, and uploads it to specific directories &#8211; this is optional, only of use if you are hosting your images.</li>
<li><strong>Running the Script</strong>: We run the script every 12 hours, using a cron job on a Raspberry Pi. We additional send it to our iPhone and our FrameTV, so the latest image is viewable either as a widget or on screen</li>
</ol>
<p>Finally we also display it on our iPad, using the <a href="https://frame-it.framer.website/">FrameIT app</a> &#8211; this auto updates the image when a new one is uploaded to the web server.</p>
<p>&nbsp;</p>
<div id="attachment_7782" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7782" class="wp-image-7782 size-large" src="https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256-1024x732.jpg" alt="Dall-E 3 image on an iPad using Frame-IT" width="1024" height="732" srcset="https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256-1024x732.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256-300x214.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256-768x549.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-7782" class="wp-caption-text">Dall-E 3 image on an iPad using Frame-IT</p></div>
<p>Do let us know if you create you own AI based weather images using data inputs &#8211; it would be interesting to see how different landscapes and counties compare.</p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a href="https://www.digitalurban.org/blog/2024/04/27/creating-art-like-weather-forecast-images-with-dall%c2%b7e-3-and-api-data/">Creating Art Like Weather Forecast Images with DALL·E 3 and API Data</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tellus Mater: An AI That Thinks it&#8217;s Mother Earth</title>
		<link>https://www.digitalurban.org/blog/2023/12/05/tellus-mater-an-ai-that-thinks-its-mother-earth/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Tue, 05 Dec 2023 16:35:37 +0000</pubDate>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Engagement]]></category>
		<category><![CDATA[Making]]></category>
		<guid isPermaLink="false">https://connected-environments.org/?p=7528</guid>

					<description><![CDATA[<p>Artificial Intelligence is on everyone’s minds, and so is the human-induced environmental decline of our planet Earth. The Connected Environments team, as part of The Bartlett Centre for Advanced Spatial...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2023/12/05/tellus-mater-an-ai-that-thinks-its-mother-earth/">Tellus Mater: An AI That Thinks it&#8217;s Mother Earth</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Artificial Intelligence is on everyone’s minds, and so is the human-induced environmental decline of our planet Earth.</p>
<div id="attachment_7530" style="width: 279px" class="wp-caption alignright"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7530" class="wp-image-7530" src="https://connected-environments.org/wp-content/uploads/2023/11/TM_main-768x1024.jpg" alt="" width="269" height="358" /><p id="caption-attachment-7530" class="wp-caption-text">Tellus Mater Installation</p></div>
<p>The Connected Environments team, as part of The Bartlett Centre for Advanced Spatial Analysis (CASA), invites you to come and consider both through a new interactive installation developed in response to Gaia, by Luke Jerram, featuring an AI interface that thinks it is the spirit of the Earth itself.</p>
<p>This installation extends the enduring concept of Mother Earth through recent developments in natural language processing and artificial intelligence, allowing you to talk to Mother Earth. Trained on over 300 billion words, Tellus Mater uses a large language model to converse and generate answers to questions about the planet, ecology and imagined futures based on data available up to September 2021.</p>
<div id="attachment_7529" style="width: 398px" class="wp-caption alignleft"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7529" class=" wp-image-7529" src="https://connected-environments.org/wp-content/uploads/2023/11/8A330E79-6868-4058-AB6A-099F4633F076_1_105_c.jpeg" alt="Tellus Mater ChatGPT Interface" width="388" height="291" /><p id="caption-attachment-7529" class="wp-caption-text">Tellus Mater ChatGPT Interface</p></div>
<p>A new moving image work offers an artistic response to the AI language model. Integrating fragments of text generated through hours of conversational interaction with archival images of botanical gardens, the video loop (below) invites reflections on the generative potential and limitations of the technology as a form of collective expression and medium for dreaming up alternative future worlds.</p>
<p>All text input and answers are logged as part of an ongoing series of Internet of Things-related research projects developed in CASA into conversations with objects in our built and natural environment.</p>
<p>Tellus Mater has been in place for a month, and so far, it has produced 55, 944 words of conversation, equating to 106 pages of A4. Conversations have been wide and varied, ranging from asking Gaia what her favourite country is (she does not have a preference) through to the meaning of life (a deeply personal and individual quest &#8211; it may involve exploring one&#8217;s values, finding fulfilment in meaningful relationships and experiences, seeking knowledge and wisdom, or connecting with something greater than oneself) and onwards to why people dislike rain (its important to remember rain is essential for maintaining life on earth).</p>
<p>Created as an art installation, the movie runs alongside the interface, intercutting text generated through hours of conversation with Mother Earth and archival images of botanical gardens; the video loop explores different forms of world-making and imagining.</p>
<p><iframe loading="lazy" title="TellusMaterFinal" src="https://player.vimeo.com/video/888625898?dnt=1&amp;app_id=122963" width="1080" height="608" frameborder="0" allow="autoplay; fullscreen; picture-in-picture"></iframe></p>
<p>The work was created by Professor Andrew Hudson-Smith and Dr Leah Lovett of the Connected Environments Lab, UCL EAST, as part of The Bartlett Centre for Advanced Spatial Analysis and was kindly supported by the UCL East Engagement team. It will be on show at Marshgate until the end of the year.</p>
<p>The post <a href="https://www.digitalurban.org/blog/2023/12/05/tellus-mater-an-ai-that-thinks-its-mother-earth/">Tellus Mater: An AI That Thinks it&#8217;s Mother Earth</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Make a Lightsaber Realtime Wind Speed Gauge</title>
		<link>https://www.digitalurban.org/blog/2023/11/09/lightsaber/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Thu, 09 Nov 2023 09:55:58 +0000</pubDate>
				<category><![CDATA[Making]]></category>
		<category><![CDATA[Open Gauges]]></category>
		<guid isPermaLink="false">https://connected-environments.org/?p=7469</guid>

					<description><![CDATA[<p>The post <a href="https://www.digitalurban.org/blog/2023/11/09/lightsaber/">How to Make a Lightsaber Realtime Wind Speed Gauge</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div id="fws_69709a69f3d77"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>Imagine wielding the power of the Force, not to fight Sith Lords, but to display real-time data &#8211; in our case, wind speed, but the code/build can be adapted to any data feed. Using a NeoPixel strip inside a lightsaber tube, we can create a stunning visual representation of wind speeds. In this post, we&#8217;ll look at the build and dive into the code and the concept, helping you turn a lightsaber blade into a unique data meter. The build is part of the ongoing <a href="https://connected-environments.org/portfolio/opengauges/">Open Gauges Project,</a> which provides code and 3D print files to build several open-source data gauges.</p>
<h2><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-7479" src="https://connected-environments.org/wp-content/uploads/2023/10/LightSaberTitle-1024x497.jpg" alt="" width="1024" height="497" /></h2>
<h2>Why a Lightsaber?</h2>
<div id="attachment_7490" style="width: 161px" class="wp-caption alignright"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7490" class="size-large wp-image-7490" src="https://connected-environments.org/assets/img/blog/202311-lightsaber/lightsabervertical-151x1024.png" alt="LightSaber Data Tube" width="151" height="1024" /><p id="caption-attachment-7490" class="wp-caption-text">LightSaber Data Tube</p></div>
<p>Aside from it being just plain cool, the lightsaber&#8217;s blade offers a perfect medium for light diffusion. This means that each individual LED&#8217;s light on the NeoPixel strip spreads out, blending smoothly with its neighbours, ensuring that the entire saber glows uniformly. This makes it easier to visualise and read the data as the light is distributed evenly across the length of the lightsaber.</p>
<blockquote>
<h3>Whether you&#8217;re a Star Wars fan, a weather enthusiast, or just someone looking for a cool project, this NeoPixel Lightsaber wind meter offers a fun and educational experience. May the winds be with you!</h3>
</blockquote>
<h2>The Hardware</h2>
<p>The main tube comprises a <a href="https://thesaberarmory.com/collections/neopixels-led-strips/products/1-thin-walled-trans-white-polycarbonate-tube-1-metre">1&#8243; OD Thin Walled Trans White Polycarbonate Blade Tube</a> with a <a href="https://thesaberarmory.com/collections/neopixels-led-strips/products/1-thin-walled-neopixelled-strip-foam-diffuser-1-meter">one-metre-long Foam Diffuser Tube</a> to add to the diffusion level. The diffuser tube is also wrapped in a length of <a href="https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fthesaberarmory.com%2Fproducts%2Fblade-diffusion-film&amp;data=05%7C01%7Cafroditi.tampakopoulou.20%40ucl.ac.uk%7Cfba3e538d32f4d92f29c08dbe08e3eaa%7C1faf88fea9984c5b93c9210a11d9a5c2%7C0%7C0%7C638350673755388695%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=1KsUPV7zE60Kibzelrku2%2BOx7uGZvat0BncuSH%2BZasw%3D&amp;reserved=0">Blade Diffusion Film</a>. All of these are sourced from the excellent <a href="https://thesaberarmory.com/">https://thesaberarmory.com/</a> in the UK.</p>
<div id="attachment_7485" style="width: 399px" class="wp-caption alignleft"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7485" class=" wp-image-7485" src="https://connected-environments.org/wp-content/uploads/2023/11/plasma-stick-2040w-3_10228028-64a8-4dad-ade7-07b88aa5cb57_1500x1500_crop_center-e1699438729378-1024x358.webp" alt="Plasma Stick 2040W" width="389" height="136" /><p id="caption-attachment-7485" class="wp-caption-text">Plasma Stick 2040W</p></div>
<p>We put a standard 144 WS2812b Neopixels inside the foam tube<a href="https://www.amazon.co.uk/dp/B01CDTEGGO?psc=1&amp;ref=ppx_yo2ov_dt_b_product_details"> in a one-metre strip</a>. This is subsequently wrapped in the Blade Diffusion Film, which fits inside the Polycarbonate Tube. This is how most lightsabers are made; a strip of Neopixels inside a diffuser to make for smooth fluorescent-like lighting inside the tube. To power it, we use a Pi PicoW. Any Pi Pico will do, but Pimoroni makes one precisely for Neopixels, the <a href="https://shop.pimoroni.com/products/plasma-stick-2040-w?variant=40359072301139">Plasma Stick 2040W PicoW Aboard</a>.</p>

<p>The lightsaber tube is mounted onto a 1.25-metre length of timber using a top and bottom end mount, which are 3D printed; all the 3D printed files are available in the GitHub Repository. The bottom part is a holder for both the Light Saber tube and the PicoW, with a screw on the bottom lid allowing easy access to the wiring.</p>
<div id="attachment_7486" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7486" class="size-large wp-image-7486" src="https://connected-environments.org/wp-content/uploads/2023/11/Screenshot-2023-11-03-at-11.11.46-1024x258.png" alt="Lightsaber Data Tube Holder - Fusion 360" width="1024" height="258" /><p id="caption-attachment-7486" class="wp-caption-text">Lightsaber Data Tube Holder &#8211; Fusion 360</p></div>
<p>The following YouTube clip from the Saber Armory provides an excellent guide to assembling the sabre. We use a flexible neopixel strip and, of course, different mounts, but the build is similar:</p>
<p><iframe loading="lazy" title="KR Sabers How To: Make A Lightsaber NeoPixel Blade Using KR &#039;Pixel Stick&#039; PCB 2020" width="1080" height="608" src="https://www.youtube.com/embed/5U_wD-h-i2Q?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></p>
<p>&nbsp;</p>
<h2>The NeoPixels</h2>
<p>NeoPixels are individually addressable RGB LEDs. These are LEDs where you can control the colour and brightness of each individual light diode on the strip. With a long strip of these LEDs inside a lightsaber tube, we can represent wind speeds by lighting up different portions of the strip in varying colours.</p>
<h2>How Do We Represent Wind Speed?</h2>
<p>We divide the range of possible wind speeds into sections. In our code example, these sections are represented by colors:</p>
<ul>
<li>0 to 10: <strong>BLUE</strong> (Low winds)</li>
<li>10 to 20: <strong>GREEN</strong> (Fresh winds)</li>
<li>20 to 30: <strong>YELLOW</strong> (Moderate winds)</li>
<li>30 to 40: <strong>ORANGE</strong> (Strong winds)</li>
<li>Above 40: <strong>RED</strong> (Above Gale Force)</li>
</ul>
<p>As the wind speed increases, more of the strip lights up, moving through the colors as it progresses. Additionally, the highest wind speed measured is indicated with a <strong>RED</strong> pixel, serving as a max wind marker. This resets at midnight and provides an at-a-glance view of the maximum wind gust for the day.</p>
<h2>Let&#8217;s Dive into the Code</h2>
<p>All the files required are available in the GitHub Repository. We have aimed to make it as simple as possible to understand and edit. As such, we break down the code below. If you want to, you can simply copy across all the files from our GitHub to your PiPicoW, edit the config file for your wifi and our example should happily work. However, if you want to know more about the workings &#8211;</p>
<p>The heart of our project is the NeoPixel library and the MQTT protocol to receive wind speed data (we explore this in more depth below). We use MQTT as it allows real-time data to be effectively streamed to the Lightsaber blade. It also means the data can be swapped for other feeds as needs be, such as Air Pressure, Air Quality, Temperature etc &#8211; indeed any numerical data stream you can find. Our MQTT stream is provided by a Davis Vantage Pro 2 via Weewx on a Raspberry Pi which outputs the MQTT stream.</p>
<p>First, we set up the NeoPixel strip:</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 gizmo:dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md">python</div>
</div>
<div>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">from neopixel import Neopixel 

# Set up NeoPixels numpix = 144 pixels = Neopixel(numpix, 0, 15, "GRB") pixels.brightness(255)</pre>
</div>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 gizmo:dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md">We have 144 LEDs on our strip. We initialize it and set its brightness to maximum.</div>
</div>
<p>Next, we define our wind speed ranges and corresponding colors &#8211; this can be edited according to the wind speed range you want to use.</p>
<div class="bg-black rounded-md">
<div>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">colors = {
    'BLUE': (0, 0, 255),
    'GREEN': (0, 255, 0),
    ...
}

WIND_SPEED_RANGE = [0, 60]
multiplier = numpix / (WIND_SPEED_RANGE[1] - WIND_SPEED_RANGE[0])


</pre>
</div>
<div>The update_pixels function is the heart of the color-mapping logic. It translates wind speed values into color changes on the NeoPixel strip:</div>
<div class="flex items-center relative text-gray-200 bg-gray-800 gizmo:dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md">
<ul>
<li>A gentle breeze is shown in <strong>blue</strong>, indicative of calm weather.</li>
<li>As the wind picks up, the colors transition to <strong>green</strong>, a universal symbol of &#8216;go&#8217; or safety.</li>
<li>When winds grow stronger, the color shifts to <strong>yellow</strong>, suggesting caution.</li>
<li>Higher wind speeds are shown in <strong>orange</strong>, and finally,</li>
<li>Potentially dangerous wind speeds are indicated with <strong>red</strong>, universally associated with warnings and danger.</li>
</ul>
<p>This gradual change of colors not only represents the data but also provides an intuitive sense of the wind&#8217;s intensity.</p>
<h4>Dynamic Updates</h4>
<p>The script dynamically updates the NeoPixel colors as the wind speed changes. By using a threshold, minor fluctuations are filtered out preventing the display from changing too frequently and thus improving the readability of the data. Only significant changes in wind speed result in a color change, ensuring a clear and comprehensible visual output.</p>
</div>
</div>
<h4>Tracking the Peak Wind Speed</h4>
<p>The script utilizes global variables to keep track of the current maximum wind speed (max_wind) and the previous maximum  (prev_max_wind). The function sub_cb updates these values as new wind speed messages are received via MQTT (we explore MQTT more in the next step):</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">if wind &gt; max_wind:
    max_wind = int(wind)
</pre>
<p>This simple logic ensures that only the highest wind speed is showcased as the maximum.</p>
<h4>Visualizing the Maximum Wind Speed</h4>
<p>The maximum wind speed is visualized distinctly by coloring a specific NeoPixel in red. This is handled in the set_pixel_colour function:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">pixels[max_wind] = colors['RED']  # Update max_wind pixel
</pre>
<p>This code assigns the &#8216;RED&#8217; color from the colors dictionary to the pixel at the index corresponding to the maximum wind speed. This red marker provides an immediate visual indicator of the peak intensity of the wind speed for the current observation period.</p>
<h4>Dynamic Updates and Resets</h4>
<p>As the wind speed changes, the script continuously updates the display. If a new maximum is detected, it changes the appropriate pixel to red, and the previous maximum pixel reverts to its color that corresponds to its wind speed range. This dynamic updating gives real-time feedback about the wind&#8217;s behavior.</p>
<p>Furthermore, the script includes a scheduled reset at midnight:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">if current_time[3] == 0 and current_time[4] == 0:  # Check if hour and minute are both 0
    machine.reset()
</pre>
<div class="bg-black rounded-md">
<div>
<h3>Understanding MQTT in Our NeoPixel Lightsaber</h3>
<p>MQTT, which stands for Message Queuing Telemetry Transport, is a lightweight messaging protocol designed for low-bandwidth, high-latency, or unreliable networks. It&#8217;s become the de facto standard for IoT devices due to its simplicity and effectiveness. In our project, we use MQTT to receive wind speed data which then drives the NeoPixel display.</p>
<h3>How MQTT Works</h3>
<p>At a high level, MQTT operates over a publish/subscribe model:</p>
<ol>
<li><strong>Broker</strong>: A central server that receives messages from publishers (devices or applications that produce data) and routes them to subscribers (devices or applications that consume data). The broker manages active clients and topics.</li>
<li><strong>Topic</strong>: Think of it as a &#8220;channel&#8221; where data is published. Clients can subscribe to topics or publish data to them.</li>
<li><strong>Message</strong>: The data or information sent from the publisher to the subscriber.</li>
</ol>
<h3>Implementing MQTT in our Lightsaber</h3>
<p>In our code, the MQTT protocol is implemented using the excellent mqtt_as <a href="https://github.com/peterhinch/micropython-mqtt/tree/master">library</a>.</p>
<p>Setting up our MQTT client:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">from mqtt_as import MQTTClient, config

# Define configuration
config['subs_cb'] = sub_cb
config['wifi_coro'] = wifi_han
config['connect_coro'] = conn_han
config['clean'] = True

# Set up client
MQTTClient.DEBUG = True  
client = MQTTClient(config)
</pre>
<p>Subscribing to a topic &#8211; our topic provides wind speed data every 3 seconds. You can leave this topic in to test your system works, and then replace it with your own data, or any other data source.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">async def conn_han(client):
    await client.subscribe('personal/ucfnaps/downhamweather/windSpeed_mph', 1)
</pre>
<p>When a message is published to this topic, our sub_cb function is triggered.</p>
<h3>Processing Received Data</h3>
</div>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">def sub_cb(topic, msg, retained):
    ...
    wind_speed = float(msg)
    ...
</pre>
<p>We convert the received message into a number, which represents our wind speed. Depending on the wind speed value, the corresponding section of the NeoPixel strip is illuminated.</p>
</div>
<p>The main logic for setting the color of the pixels based on the wind speed is in the set_pixel_color function. This function checks if the wind speed has increased or decreased since the last measurement and updates the lightsaber&#8217;s glow accordingly.</p>
<p>The full code is below:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">from neopixel import Neopixel
from mqtt_as import MQTTClient, config
from config import wifi_led, blue_led
import uasyncio as asyncio
import machine
import ntptime
import time

# Set up NeoPixels
numpix = 144
pixels = Neopixel(numpix, 0, 15, "GRB")

colors = {
    'BLUE': (0, 0, 255),
    'GREEN': (0, 255, 0),
    'YELLOW': (255, 100, 0),
    'ORANGE': (255, 50, 0),
    'RED': (255, 0, 0),
    'OFF': (0, 0, 0)
}

pixels.brightness(255)
prev_wind = 0
prev_max_wind = 0
max_wind = 0  # Initialize max_wind

WIND_SPEED_RANGE = [0, 60] #actual is half this amount to allow the max wind marker virtually
multiplier = numpix / (WIND_SPEED_RANGE[1] - WIND_SPEED_RANGE[0])

UPDATE_THRESHOLD = 2  # Only update if wind speed changes by 2 or more

def set_pixel_color(wind, max_wind):
    global prev_wind
    
    if abs(wind - prev_wind) &lt; UPDATE_THRESHOLD:
        return

    while prev_wind &lt; wind:
        update_pixels(prev_wind)
        time.sleep(0.05)
        prev_wind += 1

    while prev_wind &gt; wind:
        update_pixels(prev_wind)
        time.sleep(0.05)
        prev_wind -= 1

    pixels[max_wind] = colors['RED']  # Update max_wind pixel

    pixels.show()


def update_pixels(wind_value):
    for i in range(1, numpix):
        if i &lt;= wind_value &lt; numpix:
            if i &lt;= 20:
                color = colors['BLUE']
            elif i &lt;= 40:
                color = colors['GREEN']
            elif i &lt;= 80:
                color = colors['YELLOW']
            elif i &lt;= 100:
                color = colors['ORANGE']
            else:
                color = colors['RED']
            pixels[i] = color
        elif i == max_wind:  # Use max_wind directly
            pixels[i] = colors['RED']
        else:
            pixels[i] = colors['OFF']
    pixels.show()

def sub_cb(topic, msg, retained):
    global max_wind, prev_max_wind

    print(f'Topic: "{topic.decode()}" Message: "{msg.decode()}" Retained: {retained}')
    wind_speed = int(msg)

    if WIND_SPEED_RANGE[0] &lt;= wind_speed &lt;= WIND_SPEED_RANGE[1]:
        wind = (wind_speed - WIND_SPEED_RANGE[0]) * multiplier

        if wind &gt; max_wind:
            max_wind = int(wind)

        if max_wind != prev_max_wind:  # Check if max_wind has changed
            print("Max Wind", max_wind)
            prev_max_wind = max_wind

        set_pixel_color(wind, max_wind)
    else:
        for i in range(numpix):
            pixels[i] = colors['OFF']
        pixels.show()


async def get_current_minute():
    try:
        ntptime.settime()  
        current_time = time.localtime()
        return current_time[4]  
    except:
        print("Could not get the time from the internet")
        return None

#Reset Wind Max and System at Midnight
async def reset_on_hour(): 
    while True:
        try:
            ntptime.settime()  # Get the current time from the internet
            current_time = time.localtime()
            if current_time[3] == 0 and current_time[4] == 0:  # Check if hour and minute are both 0
                machine.reset()
            else:
                await asyncio.sleep(60 - current_time[5])
        except:
            print("Could not get the time from the internet")
            await asyncio.sleep(60)  # Retry after 1 minute if time sync fails


async def heartbeat():
    s = True
    while True:
        await asyncio.sleep_ms(500)
        blue_led(s)
        s = not s

async def wifi_han(state):
    wifi_led(not state)
    print('Wifi is ', 'up' if state else 'down')
    await asyncio.sleep(1)
    if state:
        asyncio.create_task(reset_on_hour())  # Start reset_on_hour task after WiFi is connected

async def conn_han(client):
     # await client.subscribe('personal/ucfnaps/saber/config/', 1)
       await client.subscribe('personal/ucfnaps/downhamweather/windSpeed_mph', 1)

async def main(client):
    try:
        await client.connect()  # Ensure WiFi and MQTT connection before starting other tasks
    except OSError:
        print('Connection failed.')
        return
    
    n = 0
    while True:
        await asyncio.sleep(5)
        n += 1

# Define configuration
config['subs_cb'] = sub_cb
config['wifi_coro'] = wifi_han
config['connect_coro'] = conn_han
config['clean'] = True

# Set up client
MQTTClient.DEBUG = True  
client = MQTTClient(config)

asyncio.create_task(heartbeat())

try:
    asyncio.run(main(client))
finally:
    client.close()  
    asyncio.new_event_loop()

</pre>
<h2>Bringing it All Together</h2>
<p>We also provide two wall mounts which screw onto the back of the backing wood. This provides spacing so the Lightsaber Wind Gauge has a space off the wall as well as a hook for a standard nail or screw. The wood was dyed with Dark Oak wood stain and the wind speed indicators (text and numbers) were glued at the corresponding lengths along the lightsaber blade.</p>
<div id="attachment_7509" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7509" class="size-large wp-image-7509" src="https://connected-environments.org/wp-content/uploads/2023/11/WindNeoPixelLightSaberTube_2023-Nov-08_03-20-52PM-000_CustomizedView14012120140-1024x168.png" alt="LightSaber Data Tube - Fusion360" width="1024" height="168" /><p id="caption-attachment-7509" class="wp-caption-text">LightSaber Data Tube &#8211; Fusion360</p></div>
<p>To effectively space the numbers/text we changed the MQTT feed away from the realtime feed to a feed we can send data to (/saber/config). This allowed us to send the value from 5 to 60 and light up the tube, allowing us to visually see where the text/numbers are glued.</p>
<p>That completes the build, with the combination of the NeoPixel strip, MQTT for data transmission, and the aesthetic appeal of a lightsaber. We hope you agree that it makes for a unique and visually pleasing method to measure and display wind speed.</p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a href="https://www.digitalurban.org/blog/2023/11/09/lightsaber/">How to Make a Lightsaber Realtime Wind Speed Gauge</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Reimaging the Traditional Weather House with Open Data, Laser Cutting and 3D Printing</title>
		<link>https://www.digitalurban.org/blog/2023/08/18/reimaging-the-traditional-weather-house-with-open-data-laser-cutting-and-3d-printing/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Fri, 18 Aug 2023 13:36:46 +0000</pubDate>
				<category><![CDATA[Making]]></category>
		<category><![CDATA[Weather]]></category>
		<category><![CDATA[Black Forest]]></category>
		<category><![CDATA[Open Weather Map]]></category>
		<category><![CDATA[Pi Pico]]></category>
		<category><![CDATA[Weather House]]></category>
		<guid isPermaLink="false">https://www.digitalurban.org/?p=7179</guid>

					<description><![CDATA[<p>The post <a href="https://www.digitalurban.org/blog/2023/08/18/reimaging-the-traditional-weather-house-with-open-data-laser-cutting-and-3d-printing/">Reimaging the Traditional Weather House with Open Data, Laser Cutting and 3D Printing</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
		<div id="fws_69709a6a0577a"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>Traditional German weather houses are small, decorative structures that are popular in Germany and other parts of Europe. They are often made from wood and used to predict the weather.</p>
<div class="wp-block-image">
<figure class="alignright size-large is-resized">
<div id="attachment_7297" style="width: 310px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7297" class="wp-image-7297 size-medium" style="width: 246px; height: 159px;" src="https://www.digitalurban.org/wp-content/uploads/2023/08/Screenshot-2023-08-18-at-14.30.17-300x267.png" alt="Weather House" width="300" height="267" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/Screenshot-2023-08-18-at-14.30.17-300x267.png 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/Screenshot-2023-08-18-at-14.30.17-768x684.png 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/Screenshot-2023-08-18-at-14.30.17.png 788w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p id="caption-attachment-7297" class="wp-caption-text">A <a href="https://www.amazon.co.uk/TFA-Dostmann-48-1503-08-Weather-House-Germany/dp/B07PHYZ5TS/ref=d_pd_sbs_sccl_4_1/262-7292782-5370661?pd_rd_w=u62wm&amp;content-id=amzn1.sym.c633ef94-5925-4800-8916-1372f3be4382&amp;pf_rd_p=c633ef94-5925-4800-8916-1372f3be4382&amp;pf_rd_r=2JMCC8RK4PJTBANJDR5M&amp;pd_rd_wg=QST5L&amp;pd_rd_r=e3c70644-02b0-416d-b212-1f06c94d20a8&amp;pd_rd_i=B07PHYZ5TS&amp;th=1">Traditional Weather House</a></p></div><br />
</figure>
</div>
<p>The way the weather house works is quite simple. Inside the house, there is a strip of catgut or hair. The gut relaxes or shrinks based on the humidity in the surrounding air, relaxing when the air is wet and tensing when the air is dry. Attached to the strip is a small figure of a man and a woman. When the humidity in the air changes, the strip will expand or contract, causing the figures to move.</p>
<p>If the weather is going to be dry and sunny, the man will come out of the house. If it is going to be wet and rainy, the woman will come out of the house. If the humidity is just right, both the man and the woman will be visible.</p>
<p>Traditional German weather houses are, an interesting, if slightly imprecise way to predict the weather. They are also a useful inspiration to develop a slightly more modern version using the Open Weather Map API, a 360-degree non-continuous servo, some neopixels and a Raspberry Pi Pico W.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="419" class="wp-image-7279" src="https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-1024x419.jpg" alt="Weather House Laser Cut" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-1024x419.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-300x123.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-768x314.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-1536x628.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-2048x837.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The Weather House Reimagined</figcaption></figure>
<p>In essence the house is a series of weather symbols which rotate according to the feed from the Open Weather Map API. This can be set to any location in the world and it updates every 15 minutes. It is also adaptable to change to your own source of weather data, perhaps your own personal weather station.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="614" class="wp-image-7282" src="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-1024x614.jpg" alt="Weather House Components" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-1024x614.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-300x180.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-768x461.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-1536x921.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-2048x1228.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Weather House Components</figcaption></figure>
<p>There are also two sets of neopixels &#8211; one to light up the symbol, this works well at night and looks like an outside light on the house, allowing the weather conditions to be seen. The other is an 8 pixel neopixel strip which changes colour and animates according to the conditions. If it&#8217;s raining then the lights change to blue and simulate raindrops, for sunny spells they light and dim with tinges of yellow to simulate the sun poking out of the clouds, etc. All of these are editable in the code to change according to your own preference.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="618" class="wp-image-7284" src="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-1024x618.jpg" alt="Weather House Neopixels" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-1024x618.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-300x181.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-768x463.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-1536x927.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-2048x1235.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Weather House Neopixels</figcaption></figure>
<p>At the heart of the weather house is a Raspberry Pi Pico W, held in a 3D printed enclosure which also encases the LEDs and the Servo.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="495" class="wp-image-7280" src="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-1024x495.jpg" alt="" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-1024x495.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-300x145.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-768x371.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-1536x743.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-2048x991.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Weather House Laser Cut Outs</figcaption></figure>
<p>It slots into the case which, in our example, is laser cut from white perspex for the house and 3mm plywood for the roof.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="497" class="wp-image-7281" src="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-1024x497.jpg" alt="Weather House Laser Cut Outs" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-1024x497.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-300x145.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-768x372.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-1536x745.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-2048x993.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Weather House Laser Cut Outs</figcaption></figure>
<p>Once assembled the 3D printed enclosure along with the dial, fits into the main house. The servo is set to its starting point with the &#8216;Sun&#8217; icon showing through the window.</p>
<div id="attachment_7302" style="width: 784px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7302" class=" wp-image-7302" src="https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-300x166.jpg" alt="Weather House Inside View " width="774" height="428" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-300x166.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-1024x567.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-768x425.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-1536x851.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-2048x1134.jpg 2048w" sizes="auto, (max-width: 774px) 100vw, 774px" /><p id="caption-attachment-7302" class="wp-caption-text">Weather House Inside View</p></div>
<p>We power ours from a 20,000mAh power bank which keeps it running for about a week. Each time the data updates the outside lamp turns on and off, so you have a visual clue that new data has uploaded.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="508" class="wp-image-7291" src="https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-1024x508.jpg" alt="Weather House Looking Down" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-1024x508.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-300x149.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-768x381.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-1536x761.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-2048x1015.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The Final Built Weather House</figcaption></figure>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_69709a6a061c6"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>The Micropython code, build components, 3D print and laser cut files are available on <a href="https://github.com/digitalurban/Weather-House">our accompanying GitHub page</a>, note the project is still a work in progress..</p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div><p>The post <a href="https://www.digitalurban.org/blog/2023/08/18/reimaging-the-traditional-weather-house-with-open-data-laser-cutting-and-3d-printing/">Reimaging the Traditional Weather House with Open Data, Laser Cutting and 3D Printing</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MQTT Scroller for the Pimoroni Stellar Unicorn: THE: Time, Headlines and Environmental Information</title>
		<link>https://www.digitalurban.org/blog/2023/08/03/mqtt-scroller-for-the-pimoroni-stellar-unicon-the-time-headlines-and-envivronmental-information/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Thu, 03 Aug 2023 08:49:16 +0000</pubDate>
				<category><![CDATA[Making]]></category>
		<category><![CDATA[CASA]]></category>
		<category><![CDATA[LED Matrix]]></category>
		<category><![CDATA[MQTT Scroller]]></category>
		<category><![CDATA[Pimoroni Stellar]]></category>
		<category><![CDATA[Pimoroni Unicorn]]></category>
		<category><![CDATA[UCL]]></category>
		<guid isPermaLink="false">https://www.digitalurban.org/?p=7224</guid>

					<description><![CDATA[<p>Pimoroni make a range of LED matrix displays with Pi Pico W&#8217;s built in &#8211; previously we have used the large scale Pimoroni Galatic Unicorn and added a series of...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2023/08/03/mqtt-scroller-for-the-pimoroni-stellar-unicon-the-time-headlines-and-envivronmental-information/">MQTT Scroller for the Pimoroni Stellar Unicorn: THE: Time, Headlines and Environmental Information</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Pimoroni make a range of LED matrix displays with Pi Pico W&#8217;s built in &#8211; previously we have used the large scale <a href="https://shop.pimoroni.com/products/space-unicorns?variant=40842033561683" target="_blank" rel="noreferrer noopener" data-type="URL" data-id="https://shop.pimoroni.com/products/space-unicorns?variant=40842033561683">Pimoroni Galatic Unicorn</a> and added <a href="https://github.com/ucl-casa-ce/Galactic-Unicorn-MQTT-Scroller" target="_blank" rel="noreferrer noopener" data-type="URL" data-id="https://github.com/ucl-casa-ce/Galactic-Unicorn-MQTT-Scroller">a series of scripts on GitHub</a> to allow it to scroll MQTT messages. Pimoroni have just released two new versions, the <a href="https://shop.pimoroni.com/products/space-unicorns?variant=40842626596947" target="_blank" rel="noreferrer noopener" data-type="URL" data-id="https://shop.pimoroni.com/products/space-unicorns?variant=40842626596947">Cosmic Unicorn</a> at 32 x 32 pixels and the <a href="https://shop.pimoroni.com/products/space-unicorns?variant=40842632953939" target="_blank" rel="noreferrer noopener" data-type="URL" data-id="https://shop.pimoroni.com/products/space-unicorns?variant=40842632953939">Stellar Unicorn</a> at 16 x 16 pixels, both of these are also pefect for scrolling information and as such we have updated our scripts and provided laser cut templates, firstly for the Stellar.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-1024x1024.jpg" alt="" class="wp-image-7226" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-1024x1024.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-300x300.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-150x150.jpg 150w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-768x768.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-100x100.jpg 100w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-140x140.jpg 140w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-500x500.jpg 500w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-350x350.jpg 350w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-1000x1000.jpg 1000w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724-800x800.jpg 800w, https://www.digitalurban.org/wp-content/uploads/2023/08/PhotoRoom_20230801_135724.jpg 1294w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>The code is set up around our THE: Time, Headlines and Envivronmental Information stream, this links in feeds from our own MQTT server, providing details on the time, news, weather and earthquake information. You can choose to leave this in place (good for a first test) or add your own MQTT feed. The code uses different coloured backgrounds for different text in feeds &#8211; ie News, Weather, Time, you can edit these accordingly to match your own feed. Our feed updates every couple of minutes, for a constant stream of information.</p>



<p>To set it all, all you need do it copy all the files to your Stellar Unicon using Thonny &#8211; edit config.py to add your Wifi and MQTT broker credentials.</p>



<p>Headover to our <a rel="noreferrer noopener" href="https://github.com/ucl-casa-ce/Stellar-Unicorn-MQTT-Scroller" data-type="URL" data-id="https://github.com/ucl-casa-ce/Stellar-Unicorn-MQTT-Scroller" target="_blank">GitHub Repository to download the files</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="970" src="https://www.digitalurban.org/wp-content/uploads/2023/08/StellarParts-1024x970.jpg" alt="" class="wp-image-7231" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/StellarParts-1024x970.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/StellarParts-300x284.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/StellarParts-768x727.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/StellarParts-1536x1455.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/StellarParts.jpg 1725w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">The Case</h4>



<p>Three files are provided to laser cut:</p>



<ol class="wp-block-list">
<li>The laser cut front as pictured with Etching (THE: Time, Headlines, Environmental)</li>



<li>The laser cut front, minus text</li>



<li>Front cut for the clear acrylic</li>
</ol>



<p>The work has been created as part of work at the <a href="https://connected-environments.org/" data-type="URL" data-id="https://connected-environments.org/" target="_blank" rel="noreferrer noopener">Connected Environments Group</a> at the Centre for Advanced Spatial Analysis, University College London, the <a rel="noreferrer noopener" href="https://github.com/ucl-casa-ce/Stellar-Unicorn-MQTT-Scroller/discussions" data-type="URL" data-id="https://github.com/ucl-casa-ce/Stellar-Unicorn-MQTT-Scroller/discussions" target="_blank">GitHub page has its own discussion forum</a> if you would like to ask any questions or request changes to the code.</p>
<p>The post <a href="https://www.digitalurban.org/blog/2023/08/03/mqtt-scroller-for-the-pimoroni-stellar-unicon-the-time-headlines-and-envivronmental-information/">MQTT Scroller for the Pimoroni Stellar Unicorn: THE: Time, Headlines and Environmental Information</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Open Weather Map NeoPixel Barometer &#8211; Open Gauges</title>
		<link>https://www.digitalurban.org/blog/2022/05/31/owmbarometer/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Tue, 31 May 2022 12:53:33 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Making]]></category>
		<category><![CDATA[Open Gauges]]></category>
		<guid isPermaLink="false">https://connected-environments.org/?p=6532</guid>

					<description><![CDATA[<p>The post <a href="https://www.digitalurban.org/blog/2022/05/31/owmbarometer/">Open Weather Map NeoPixel Barometer &#8211; Open Gauges</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div id="fws_69709a6a0c106"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<div id="attachment_6540" style="width: 89px" class="wp-caption alignright"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-6540" class="wp-image-6540 size-large" src="https://connected-environments.org/wp-content/uploads/2022/05/Owmbaroplain-79x1024.png" alt="Open Weather Map Barometer" width="79" height="1024" /><p id="caption-attachment-6540" class="wp-caption-text">Open Weather Map Barometer</p></div>
<p>The <a href="https://connected-environments.org/portfolio/6172/">Open Gauges project</a> aims to allow open-source data gauges to be built, modified, and viewed as both physical (3d printed) and digital gauges. Depending on the user’s preference the models can be made to run from any online data source with a data feed &#8211; from Weather Data with Air Pressure, Temperature, Wind Speed etc though to Air Quality Gauges, Noise Meters, Energy etc.</p>
<p>Part of the initial release, from the <a href="https://connected-environments.org/people/">Connected Environments Team</a> at <a href="https://www.ucl.ac.uk/bartlett/casa">The Bartlett Centre for Advanced Spatial Analysis</a>, <a href="https://www.ucl.ac.uk/">University College London</a>, and alongside the more traditional &#8216;dial style&#8217; gauges, is our new <em><strong>Neopixel Barometer, updated for Open Weather Map. </strong></em>Back in October we published the Weather Flow version, this new, open source version is specifically designed to use the free Open Weather Map API, making it easier to use.</p>
<p>Designed to be as simple as possible it is powered by a Raspberry Pi and uses the data feed from the Open Weather Map Single Call API, making it open to anyone with data available world world, according to your choice of location. So you could chose to display local Barometric Pressure or have a series of them on display showing locations around the world. Each gauges updates every 5 minutes with a Green Pixel to note successful data collection and Red for unsuccessful</p>
<p>Full code and files can be found in the <a href="https://github.com/ucl-casa-ce/Open-Gauges/tree/main/Contributed/OpenWeatherMapNeoPixelBarometer">Open Gauges Github Repository.</a></p>
<h3>Data Source</h3>
<p>The barometer uses the One Call API from Open Weather Map, provided as JSON.</p>
<h3><a id="user-content-data-displayed" class="anchor" href="https://github.com/ucl-casa-ce/Open-Gauges/tree/main/Contributed/NeoPixelBarometer#data-displayed" aria-hidden="true"></a>Data displayed</h3>
<p>The Neopixel Barometer displays current sea level air pressure (Mb) and the current pressure trend &#8211; Rising, Steady, Falling.</p>
<p>The data updates every five minutes with a sweep of blue/yellow neopixels on power up. The pressure trend is calculated in the Python script, as its not part of the API. As such it takes 3 hours to calibrate &#8211; with &#8216;Rising&#8217; shown initially and then changing to the current trend after 3 hours of data has been downloaded.</p>
<h3><a id="user-content-3d-printed-model" class="anchor" href="https://github.com/ucl-casa-ce/Open-Gauges/tree/main/Contributed/NeoPixelBarometer#3d-printed-model" aria-hidden="true"></a>3D printed model</h3>
<p>The main barometer markers &#8211; ie STORM, FAIR, CHANGE, as well as the numbers &#8211; 950, 960 etc are provided as separate .stl files to 3D print. This is to allow easy alignment with the Neopixel strip with the correct pixel.</p>
<p>The conditions come in a single section, again to be aligned once the Neopixel strip is mounted, the Trend titles are also provided. We also provide the end caps for the Acrylic Tube (optional, see below).</p>
<h3><a id="user-content-wood" class="anchor" href="https://github.com/ucl-casa-ce/Open-Gauges/tree/main/Contributed/NeoPixelBarometer#wood" aria-hidden="true"></a>Wood</h3>
<p>The Neopixel strip is can be mounted either onto a thin strip of wood approx 125 centimetres long by 4.5 cm wide using the fixings that come with the Neopixel Strip, or with a wider block. The Text/Numbers are 3D printed and glued on the wood. It is a standard wood strip that most DIY/Hardware stores stock. The use of wood/mounting is to allow flexibility &#8211; ie mount it however you like.</p>
<blockquote><p>
As an update to this post (June 22nd, 2022) we now include mounting &#8216;Feet&#8217; for a table top horizontal display &#8211; as illustrated below, angled at 30 degrees to provide a clear viewing angle of the air pressue.
</p></blockquote>
	</div>
</div>



<div class="img-with-aniamtion-wrap  custom-size" data-max-width="100%" data-max-width-mobile="default" data-shadow="none" data-animation="fade-in" >
      <div class="inner">
        <div class="hover-wrap"> 
          <div class="hover-wrap-inner">
            <img loading="lazy" decoding="async" class="img-with-animation skip-lazy " data-delay="0" height="446" width="1024" data-animation="fade-in" src="https://www.digitalurban.org/wp-content/uploads/2022/05/5fdffb70-fb04-4b13-b76d-882c537abd21-1024x446.png" alt="Digital Barometer Angled Stand" srcset="https://www.digitalurban.org/wp-content/uploads/2022/05/5fdffb70-fb04-4b13-b76d-882c537abd21-1024x446.png 1024w, https://www.digitalurban.org/wp-content/uploads/2022/05/5fdffb70-fb04-4b13-b76d-882c537abd21-300x131.png 300w, https://www.digitalurban.org/wp-content/uploads/2022/05/5fdffb70-fb04-4b13-b76d-882c537abd21-768x334.png 768w, https://www.digitalurban.org/wp-content/uploads/2022/05/5fdffb70-fb04-4b13-b76d-882c537abd21.png 1512w" sizes="auto, (max-width: 1024px) 100vw, 1024px" />
          </div>
        </div>
      </div>
    </div>
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<h3><strong>Acrylic Tube</strong></h3>
<p>For this updated version we adapted the model to allow the additional use of an 1m x 28mm Acrylic Tube, widely available it allows the LED strip to be mounted into the tube (we used a piece of conduit to straighten the led strip). This give the barometer a more &#8216;finished look&#8217; and provides more of a nod towards the mercury barometers of old.</p>
<h3><a id="user-content-hardware" class="anchor" href="https://github.com/ucl-casa-ce/Open-Gauges/tree/main/Contributed/NeoPixelBarometer#hardware" aria-hidden="true"></a>Hardware</h3>
<p>The hardware has been selected to be as low cost as possible &#8211;</p>
<ul>
<li>A Raspberry Pi &#8211; We used the Raspberry Pi Zero W</li>
<li>1 Meter 144 Addressable Neopixel Strip (NeoPixel/WS2812/SK6812 compatible) &#8211; <a href="https://thepihut.com/products/flexible-rgb-led-strip-neopixel-ws2812-sk6812-compatible-144-led-meter" rel="nofollow">Example here from The PiHut</a></li>
</ul>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_69709a6a0ffd0"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
	<div class="wpb_raw_code wpb_content_element wpb_raw_html" >
		<div class="wpb_wrapper">
			<div class="sketchfab-embed-wrapper"> <iframe loading="lazy" title="Open Weather Map Neopixel Barometer" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="autoplay; fullscreen; xr-spatial-tracking" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share width="1200" height="480" src="https://sketchfab.com/models/e189b0e0d35f4c008e86936d1515c600/embed?autostart=1&camera=0&transparent=1"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/open-weather-map-neopixel-barometer-e189b0e0d35f4c008e86936d1515c600?utm_medium=embed&utm_campaign=share-popup&utm_content=e189b0e0d35f4c008e86936d1515c600" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Open Weather Map Neopixel Barometer </a> by <a href="https://sketchfab.com/digitalurban?utm_medium=embed&utm_campaign=share-popup&utm_content=e189b0e0d35f4c008e86936d1515c600" target="_blank" style="font-weight: bold; color: #1CAAD9;"> digitalurban </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=e189b0e0d35f4c008e86936d1515c600" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
		</div>
	</div>

			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_69709a6a11e9a"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>It is made to be mounted either vertically or horizontally &#8211; the 3D model above details the make (click and drag to examine the model/zoom in). The tabletop version with <a href="https://skfb.ly/ovCDN">30-degree angled legs can now be viewed directly on Sketchfab</a>.</p>
<h3>Code and library</h3>
<p>The full code/3d printing files etc are provided on the <a href="https://github.com/ucl-casa-ce/Open-Gauges/tree/main/Contributed/NeoPixelBarometer">Github page</a>, which also includes the other Open Gauges to 3D print and make.</p>
<p><strong>Libraries used</strong></p>
<ul>
<li>requests</li>
<li>json</li>
<li>time</li>
<li>neopixel</li>
<li>board</li>
</ul>
<h2 dir="auto">Digital model</h2>
<p dir="auto">The model is also provided in Fusion 360 for any edits to wording, sizing etc (note the Pi is not included due to separate licensing).</p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a href="https://www.digitalurban.org/blog/2022/05/31/owmbarometer/">Open Weather Map NeoPixel Barometer &#8211; Open Gauges</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
