Building a weather system with Jan Goolsbey
S05:E38

Building a weather system with Jan Goolsbey

Episode description

Jan Goolsbey joins the show for his second visit. He shares how he built a weather monitoring system using sensors, weather APIs, display devices, CircuitPython, and Adafruit IO.

Jan was previously a guest on episode 33.

The CircuitPython Show is now on Bluesky!

Show Notes

00:00 Intro

00:16 Welcome Jan

00:28 The start of the weather system

2:09 How to solve the corrosion problem

4:50 Internet connected sensors with a PyPortal and Adafruit IO

7:43 Adding external weather conditions from an API to Adafruit IO

9:47 Evolving into a combined weather system

12:40 Discovering Apple WeatherKit integration in Adafruit IO+

14:00 Version 1 of the weather system architecture

14:52 What were the challenges in the new architecture?

17:20 Multiple display devices and Adafruit IO throttling

20:55 Version 2 architecture: Remix

22:34 The user interfaces

27:09 What’s next?

29:09 Wrap-up

Correction: Jan referred to Jerry Needell as working at Apple instead of Adafruit.

Follow Jan on Bluesky.

View Jan’s projects on the Adafruit Playground.

Download transcript (.srt)
0:00

Welcome to the CircuitPython Show. I'm your host, Paul Cutler. This episode I welcome

0:07

back Jan Goolsbey, also known in the Adafruit community as cgrover. Jan first visited the

0:12

show back in episode 33, which I've linked in the show notes. Jan, welcome back to the

0:16

show.

0:18

Hello, Paul. How are you today?

0:20

I'm doing great. Thanks for making time and coming back on. I really appreciate it.

0:24

Well, I enjoy the discussions with you and I'm looking forward to this one.

0:28

I am too, so you've been working on a weather station for a number of years.

0:32

Tell me how it all got started.

0:34

Well, it got started many years ago when I, when we moved into this house, we have this

0:39

detached garage that I call my workshop.

0:42

It does have an area set aside for that.

0:45

And I brought a collection of my electronics projects.

0:48

And back then I wasn't doing a lot of software, it was mostly hardware.

0:51

So I had, you know, an IBM 5150 personal computer.

0:56

I had Intel 8080 parts and resistors and capacitors, you know, the whole thing.

1:01

And I was throwing them out in this detached garage where we have in the

1:05

workshop that was unheated.

1:08

And I noticed after about a year, components started to decay and especially

1:14

the metal leads, like on integrated circuits would get this corrosion layer on

1:18

them and it made it really difficult to solder.

1:20

They didn't work in the sockets anymore.

1:23

And so I was getting a little bit discouraged.

1:25

I also noticed some damage to my metallic tools, you know, things like wrenches and screwdrivers.

1:31

We're starting to show some corrosion on the outside of that.

1:34

And I never thought that would happen because we live in the desert here in Washington State.

1:40

You just don't expect that to happen.

1:42

But we have wet winters.

1:45

You know, even though we get less than six inches of rain in a year, it happens in the

1:49

winter and that's when things are colder and that's when condensate forms.

1:53

Well, you get the drift there. I was needing to upgrade the garage so that I could store things out there and work on things out there without worrying about corrosion. So I get this new obsession. The new obsession was, how do I solve this corrosion? So I did some reading about it. And the first thing I needed to do was measure temperature and humidity. And that was, that was really where it all starts. And, and if you can determine when condensate forms,

2:23

then you can probably prevent it. And that's really what I wanted to do. I didn't want to put a heater out in the garage right away. I wanted to figure this thing out first. So that's where this started. And fortunately, about that same time, MicroPython came onto the scene. And Tony DeCola was working on putting MicroPython on some Adafruit M0 boards. And I thought, well, this is perfect. Okay, you know, I had done some Arduino programming. But Arduino doesn't, you know, it's not as good as Arduino. And I thought, well, this is perfect. Okay, you know, I had done some

2:53

doesn't work with my brain. I'm a hardware guy and so I had to do compiling and all this kind of stuff.

2:59

Yeah, I know how to do that, but that's not the fun part of it for me. So I wanted to get something

3:04

like MicroPython where I could very quickly put together a prototype, start to characterize what

3:10

the temperature and humidity issues were, and see if I can solve this corrosion problem. And Tony did

3:16

some great work with getting MicroPython introduced in some Adafruit boards. And I, at the same time,

3:23

Lady Ada came up with a board with an RF transmitter on it. It was the RFM69, an 800MHz transceiver that could send and receive little tiny data packets, you know, 10 to 15 character data packets. Nothing fancy, nothing fast. And I thought, but that's perfect because I just need temperature and humidity. And since it's a detached garage, I didn't want to have to go out there and read the display all the time. So I made a little unit that was, you know, a little bit more compact. And I thought, well, I'm going to have to make it a little bit more compact. And I thought, well, I'm going to have to make it a little bit more

3:53

an M0 with the RFM69 built into it, put micropython on it, stuck it out in the garage,

3:59

transmitted it to a tiny little remote that I made with an OLED display, and all I did was I just

4:06

watched temperature and humidity just to try to figure out when does corrosion occur. Meanwhile

4:12

I'm doing some studying because when you get that data, well what's the first thing you do,

4:16

at least for me, throw it in a spreadsheet. Start looking at things like dew point and the capacity

4:23

air to hold moisture and all the kind of stuff that leads to corrosion. I started to refine the

4:28

software to convert the humidity and the temperature into something that looked more like an index that

4:36

was related to whether I was experiencing a corrosion event. I was hoping to get to the

4:42

point where I could predict when a corrosion event occurred. That took me to the next phase of the project.

4:48

next phase of the project was setting aside that RFM69 and M0 and go to more of an internet solution

4:57

where I put a Pi portal out in the garage and with the same temperature humidity sensor

5:03

transmitted the data up to Adafruit I/O and got data trends and you know you've got a great

5:11

browser-based dashboard tool that I could use to look at the data and compare and get some feeling

5:17

for an even deeper feeling into how to solve this corrosion issue. And by about that time,

5:24

I figured, well, I better remodel this garage. It was built from surplus government lumber.

5:32

The whole garage was. It was very functional and it was retro-fantastic. It was great. As a matter

5:39

of fact, a friend of mine came out and filmed a short video in there about time travel because

5:45

they needed a workshop that a crazy scientist would use, you know, to build this time machine.

5:51

So they filmed the time machine portion in my workshop. And the next week was when I had the

5:56

crews come in and tear down the garage and put up a new one and build on the same footprint,

6:02

build the garage. And PiPortal was perfect timing for that. And I also put in a heat pump out in the

6:08

garage because what I had determined by then, I was using CircuitPython with the PiPortal,

6:14

I determined that even though there are some complex equations for figuring out how much moisture there is in the air and you know how it forms and and there are some standards for when you can expect certain kinds of materials to corrode, it really boiled down to keeping the garage above 32 degrees. And that way you avoid the condensation that obviously occurs when things freeze. And as long as you keep it at a comfortable temperature, somewhere above 32 degrees, you can pretty much avoid corrosion.

6:44

issues. And so if we finished the remodeling, we got the pipe portal out there, I'm watching the

6:49

data, and we had this great snow storm and I, you know, backed the car back into the garage next to

6:55

where the workshop is, and about 15 minutes later the corrosion alarm goes off and I, oh, I brought

7:01

moisture into the garage that wasn't natural. What happened? And the snow melted, we get this

7:07

corrosion event, and that created a whole new set of concerns for me that how do now how do I get

7:14

rid of the moisture in the garage. And thanks to CircuitPython, I can modify the PyPortal monitor

7:21

to give me the data that I need to look at different algorithms for solving these problems.

7:26

And prototypically, almost immediately, you can study the data, change the algorithms,

7:33

and completely change the functionality of the monitor to suit your whole new set of theories

7:39

about how you're going to predict and prevent these things. Well, since I was in the problem-solving

7:45

mode there and needed to get rid of the moisture in the garage, that's when I determined there's

7:50

a really tight link between internal corrosion and external corrosion. The data and the conditions

7:56

that can cause internal corrosion are driven by the exterior weather conditions, as well

8:02

as the heat pump and all those things. It got me thinking about how do I incorporate

8:07

external weather conditions

8:09

with the internal workshop conditions and get a better feel for

8:14

how I can prevent and how I can be even this case mitigate the

8:20

collection of the moisture in the workshop

8:23

That's when I started going down this this path of taking a look at open weather

8:30

map.org because they have a free weather condition service for local conditions and

8:36

And that worked pretty well. I had one device that looked at the external weather and one device that looked at the corrosion monitor stuff.

8:43

And I, you know, went between the two and started to try to make a correlation between those.

8:49

It became rather difficult to do that. I had spreadsheets and I couldn't correlate the data very well because I couldn't collect it in one place.

8:58

That's when I had the idea of uploading the weather condition data that I was getting from openweathermap.org into AIO, so I had streams that would show up on my browser dashboard.

9:12

And then I could start mapping one temperature set against the other and make a determination of what the relationship is between inside and outside conditions.

9:22

So I knew when to open the garage door, turn on the fan, and blow the moisture back out

9:26

into the environment.

9:28

Which doesn't work, by the way, when it's raining, because you can't fit any more moisture

9:32

in the outside air, which makes sense.

9:34

Good to know.

9:35

Yeah, I'll have to write up this whole corrosion monitoring obsession one of these days.

9:40

I'll let you know when that comes about.

9:42

I'm having too much fun programming what I'm working on right now.

9:46

And what I'm working on right now is this evolution of that into a combined weather

9:54

system that looks at internal sensors, specialty sensors that I might have locally, and weather

10:03

conditions.

10:04

And it was kind of all spawned by this AIO collection of the data feeds and the way that

10:10

I could look at that.

10:12

So I worked on an architecture where I can upload that data, where I can bring it down

10:18

to devices.

10:19

And I got to the point where I could take all that data and put it into spreadsheets

10:24

or make comparisons, but I had the collection of the data from the two sources.

10:29

And that whole thing was working fine.

10:32

And I was learning more about how I'm going to do this corrosion monitoring, how I'm going

10:37

to set these alarms.

10:38

And there's still work to be done.

10:41

know, a wrench got thrown into the works and that was openweathermap.org decided that they were going

10:46

to start charging for their service and I can't blame them. It's a great service. But the model

10:53

that they used was, at least at the time when I was making the consideration, I don't know if it's

10:57

changed, they required a credit card to be able to get data from them even though they called it a

11:05

free service. And you know I'm just not trusting enough to give somebody my credit card say here's

11:09

here's a blank check for you, you know?

11:11

And I thought, well, I'll just look for some other ones.

11:13

And I ran across weather.gov, which is a NOAA service,

11:18

the National Oceanic and Atmospheric Administration there.

11:23

I knew I could figure that one.

11:25

NOAA had this really great service

11:27

that had this fantastic detail of these weather stations

11:31

that were really close to my home.

11:33

And I thought, this is two miles away at an airport

11:36

that's real close by here.

11:37

They had a weather station.

11:39

I thought, this is perfect.

11:40

It's not just some consolidated weather data that I might get from open weather

11:44

map, which they do a good job, but they average weather stations in the area

11:49

to come up with their, their number.

11:51

I thought this is going to work great.

11:53

Well, what I found out was these little tiny weather stations, they

11:55

have peppered all over the place.

11:57

If you just look at one of them, it's not very reliable.

12:01

So, and I thought, okay, well, that's fine.

12:04

I'll just go, I'll do what openweathermap.org does.

12:07

I'll look at 20 different weather stations and I'll average the data.

12:11

And you can imagine I'm taxing CircuitPython pretty significantly.

12:15

I'm trying to do this on a Pi portal with an M4 processor, even though it has a

12:20

separate ESP32 processor on there, the M4 just doesn't have enough memory to do all

12:26

that internet, you know, downloading all the JSON files that are necessary, decoding

12:31

that.

12:31

And then of course I kind of went nuts and I needed a fancy display and that eats up

12:35

memory too. The poor little pipe portal was just suffering. Pretty soon I found that that would be an impossible task. And I really didn't know where to go from there. I didn't want to have to go back to openweathermap.org, although that would have been a viable solution. I was pouring through some Adafruit IO documentation because I'm trying to solve some of the reliability issues I was having using the M4 and memory capacity issues. And I found out that there's an Apple

13:05

weather kit plus up in AIO plus that I hadn't realized was there.

13:12

And I had been using AIO plus because, you know, I have lots of AIO feeds,

13:19

because I have lots of data sources.

13:21

So I was already paying for this, but I just didn't realize that this plus up to

13:26

the Apple weather kit was out there and it gives an open weather map kind of view

13:31

of the world, including five-day forecasts, you know, some data that I wasn't using that could be very useful. This is a no-brainer. We're just going to go with that. And that's where I started to think about this collection of data that I have as an architecture. Since I was facing that choice of determining where the source was going to be for this weather data, I got about a dozen Pi portals, I needed to make it compatible with that. That's when I started to develop that architecture. And that's where I started to think about how I could use that data to make my architecture more compatible with the weather data. And that's where I started to think about how I could use that data to make

14:01

and version one of that architecture is in an article, it's documented in an article out in the

14:08

Adafruit Playground. That was something that the objective of that architecture was to get that

14:15

the two weather conditions, you know, the internal and external weather condition data into a single

14:21

place, but it was also to try to preserve the pie cordless that I used for displays.

14:27

Since they were limited, I had to try to find an architecture that could support the need for the

14:34

PyPortal to have a bunch of data, but keep it from having to go out to the internet and get these

14:40

gigantic data files, JSON files, and decode them itself. It just couldn't do that. And so the first

14:47

architecture was designed to take care of that. So what were the challenges with the first

14:54

architecture of the weather station? Well let me recap just for a second and go

15:00

back to the you know the zero architecture was just a point-to-point

15:04

thing with that two-way radio kind of a setup and then you know I saw the

15:09

obvious need at that point to use AIO so the architecture became more AIO centric

15:17

and then I started gravitating to the Pi portal and that's that's kind of the

15:23

Lexus of the issue and when you work with the Pi portal you have a lot of overhead contained in

15:32

the drivers that make the Pi portal easy to use and easy to program but if you're trying to expand

15:38

and take in a bunch of feeds and I had a lot of AIO feeds of course you start running out of memory

15:44

and with that M4 processor and so I got to the point where I saw the need to do something different

15:51

and yet I still tried making the M4 work. You know, I bumped up against the memory all the time,

15:57

and I got rid of some of the fancy graphics and put in some more pedestrian stuff, and I just

16:03

wasn't very happy with it. So I came up with this idea that I needed to modify the architecture so

16:10

that I could still look at weather data. And the other goal was I wanted to continue to use the M4s,

16:16

the Pi portals, but be more sensitive to the memory issues and some other issues that they have,

16:22

so that I could still continue to use my investment in Pi portals, because I have many of them.

16:26

But I needed to move to something, and I'm very reluctant to move to something new, because

16:32

I had it working, I thought, and but also I'm cheap and I'd like to use the Pi portals wherever

16:38

possible. I struggle with the notion that once you write some software, you make it as good as you

16:46

possibly can and you shouldn't ever have to change it, which that's a myth. And so I get

16:52

trapped into that often. I try to talk myself into a philosophy that I learned a while ago

16:58

when I was making printed circuit boards is, yeah, it's okay to start from scratch. It's

17:02

okay to start over. You probably learned something since the last time you coded that and it's

17:08

okay to recode it and you'll probably use something better the next time around. So

17:16

limitations in the Pi portal predominantly. I wanted to have multiple display devices.

17:22

And the first architecture was kind of funny, the way I tried to synchronize all these asynchronous

17:29

devices. If you have four or five displays and they're all accessing AIO, you run into

17:34

the throttle limits of the Adafruit I/O. And if you have a free subscription to AIO, you're

17:42

limited to 30 transactions per minute, which doesn't sound like a lot, and it isn't when

17:49

you have multiple devices. Fortunately, I was using AIO Plus and I had the limit of

17:55

60 transactions per minute, and double that other rate. And I certainly appreciate the

18:01

fact that they're trying to give this service to a whole bunch of people and they need to

18:05

throttle it that way. So I would go to each one of my devices and I'd say, "Okay, the

18:12

to AIO at 10 minutes past the hour, get your business done.

18:16

And then the weather monitor can go out to AIO

18:20

and extract weather information

18:22

at 15 or 20 minutes past the hour.

18:25

And the second weather display, the one that, or the, yeah,

18:28

the second weather display that I have is in the living room

18:31

is a matrix portal.

18:33

And I said, well, you can go at 20 or 30 minutes

18:37

past the hour and get the data.

18:38

And you can only go out there every 20 minutes

18:41

get the data. I had this really complicated formula trying to synchronize all these devices

18:47

that were, that I wanted to be autonomous and it just couldn't work. Because if you

18:52

ever had an internet error, if you know what those are, which we have a few, the wireless

18:58

connection would break or something and then the device would have to resynchronize and

19:02

it would heterodyne with the other devices and you'd still end up with throttle failures.

19:06

and I just didn't know how to fix that. Well, I think Brent and Tyath, who do the development

19:14

work for Adafruit in the AIO realm, they came up with a really simple scheme for providing

19:22

throttling information. And I thought, well, I've tried everything else. Let's try this

19:29

and see if we can make it work. And I hesitated to try their new scheme for throttling because

19:35

I figured it would be way more complicated than what I could do. I'm not an expert programmer.

19:42

I ran into so many troubles trying to synchronize anyway that this throttling stuff is going

19:47

to be a scheme that will take me a while to learn how to do. I was wrong. It was so simple.

19:53

That's a good problem to have.

19:55

It was surprisingly simple. I should have known better. I should have checked it out

19:58

and played with it. Well, anyway, I know better now. But Tyep did most of the work on that

20:04

And it's just brilliant what he did just brilliant and I put in you know one or two extra lines of code

20:11

Whenever I had to go out and do something with AIO

20:14

And all it did was it did a query and it says how much throttled do I have left?

20:18

And that's all controlled them by the server rather than by my devices and my devices was just wait until there's enough throttle left to

20:25

Do something so Adafruit IO actually has part of the API that you can query it to say how many throttling requests?

20:32

Do I have left in this minute?

20:34

Yes, and and surprisingly that going out and querying how much throttle you have left doesn't seem to affect your throttle limit

20:43

Which just you know, that's a real plus

20:45

So whenever I have a transaction with AIO now, I go out and check that throttle. Well that forced me to go to a new architect

20:55

So I have an architecture version 2 that I put in place and this is the version 2 is called remix

21:02

and it's out in the Playground. If you're interested in it, there are two articles that I wrote for Playground. One is the structure of the first architecture, and the second is the structure of the second architecture. And it also gives the code examples.

21:18

And I'll make sure I link to those in the show notes as well.

21:21

And I welcome as many comments as I can get on that, because I'm hoping that I'm using a throttling correctly. It seems to work.

21:27

Because now with the second version of the architecture, I've tested with six devices and four of those are Pi portals. One is an ESP32 S3 repeater is what I call it.

21:43

but it takes the place of the corrosion monitor out in the garage and it picks up the Apple WeatherKit information, translates that and moves it back into AIO feeds that I can then access with PyPortals.

21:59

And I'm only getting that small chunk of data that I need rather than the whole JSON file.

22:04

So I can get the pi portals to continue to work because I limit how much data they get when

22:11

they're accessing AIO. They don't have to get the whole thing. They only get what they need.

22:16

So I've had six devices running with the new throttling stuff and it's just been flawless.

22:21

The only errors I have much more related to, you know, my need for fancy graphics and things like

22:28

that where I ran out of memory and that, you know, that's a personal issue that I'll just

22:32

have to resolve somehow. Well tell me a little bit about the interface because I've seen pictures

22:37

and I think most of the listeners would be interested in knowing more about it. Right now

22:42

there are four different user interfaces that I use. The corrosion monitor, even before it came

22:49

into this new architecture, was an Elkar's Star Trek style interface. It isn't touch sensitive or

22:55

or anything, but it still uses that feature. And it's built very similarly to the displays

23:02

that they actually use. Not necessarily in the code or the graphics design, although

23:09

that does kind of mirror it, but it uses a layered graphics approach. So the background

23:16

image has all of your indicators in it. Like, I'm using the internet now, or I'm going out

23:22

I'm looking at my thermometer or I'm using the SD drive to store information for that wonderful spreadsheet that I always keep track and

23:30

You cover those up with masks instead of drawing the object like an antenna or

23:37

Wireless access that's in the background and you just cover it up with a colored square. So the interface really is kind of graphical

23:46

reminiscent of the L cars and it uses some trickery to make that work which is a little stage magic which I think is kind

23:53

Of a nod to how they did things on Star Trek, too

23:56

So that's the corrosion monitor and that that has been modified somewhat and is coming to the new environment

24:03

the weather monitor was one based on something that John Park did quite a while ago on the Pi portal and

24:09

I've adapted it and changed the graphics a little bit

24:12

We call it Mikey because our local weather man. Its first name is Mike

24:18

And I recorded a snippet of his voice introducing the fact that we've turned the weather monitor on

24:23

So every time we turn it on we get our favorite forecaster telling us that he's gonna give us the web. That is pretty neat

24:30

the other interface is the matrix portal weather station and I used an m4 initially, but

24:37

There again, I started running in performance problems. So I switched that one to

24:42

the Matrix Portal S3. So it's a fully capable ESP32-S3. Lots of memory available for goofing

24:51

around with graphics and doing things. Technically I could download entire JSON files and things like

24:57

that, but I still kept it in kind of a simple display and it shows an abbreviated version of

25:03

the weather and then in the scrolling bar down below it tells us what the wind is gusting to,

25:09

it tells us what the shop temperature is and it scrolls by and we find that one probably to be

25:16

the most useful out of those interfaces the first three interfaces and the fourth interface is one

25:23

that I'm not happy with well it kind of looks like a raspberry pi booting up it's just text

25:29

and that's the translator that sits out in the garage and I really need it to be more of a clock

25:34

and I needed it to, well frankly, I needed it to look more like an LCARS interface. So,

25:39

the next version of that, which I'm working on right now, and I do have a link and some pictures

25:45

in that second Playground article, it shows a more expansive LCARS interface and it combines

25:54

the external weather with the internal shop conditions in a single display. It can either

26:01

be used as that repeater that translates data and sends it back to AIO or it can be used as a

26:07

standalone display. That's the up and coming for it. Will there be a modification to the architecture?

26:15

Well, I don't sit still on this stuff so probably a version 3 but right now I need to perfect that

26:21

new Elkars interface and that's running on a let's see that's running with a 3.4 inch

26:28

TFT feather wing with an ESP32S3 feather plugged into the backup.

26:37

So it it's kind of like a Pi Portal which I dearly love but it's it's not yet a Pi Portal.

26:45

I hope in the future to add some other bells and whistles to it so it has sound because we've got

26:50

to get Mikey to talk. And also I like to when I put these in an enclosure I like to have a

26:58

inside the enclosure in case here in the desert things get hot, you know, and you've got to turn

27:03

on the fan inside the enclosure. And that's, those are things that I need to add. Is there anything

27:09

else that comes to mind for what's next in the project? Of course, I'm still on that journey

27:14

to figure out how do I adequately predict corrosion? What weather changes outside and

27:22

conditions inside, including, you know, back in the car and that's, that has snow all over and

27:26

and under it that's gonna melt.

27:28

How do I predict when that corrosion event's going to occur?

27:33

And there's some science in that.

27:35

And right now I focus on dew point

27:38

because dew point seems to be, that's a magic number

27:41

'cause that tells you when the air is saturated with water,

27:44

that the temperature at which the air gets saturated

27:46

with water is the dew point.

27:48

Well, that tells you a lot about corrosion

27:50

because if the air is saturated with water

27:53

and you have something metallic that's a little bit colder,

27:57

it's going to condense water on that right away.

28:00

And if you compare internal dew point to external dew point,

28:06

that tells you a little bit about the other condition

28:08

I talked about where if I want to take the water

28:11

in the workshop and push it outside with a fan,

28:14

is there room outside to accept that moisture?

28:17

And dew point can tell you some of that.

28:20

It's not a true measure of capacity of the air outside,

28:24

but it's a pretty good indicator, I think.

28:27

But what I struggle with is really gaining an understanding

28:30

about how much moisture do I have in the workshop

28:35

and how much moisture can the outside tolerate?

28:38

How much can I give it?

28:40

So that's the next step is to do a little science

28:42

and try to figure this thing out.

28:44

And then you would think that would be enough.

28:47

the natural extension is now how am I going to use the features of AIO to control the

28:55

internet connected heat pump that's in the garage so that I can have it automatically

29:00

abate it while I'm sitting on a beach somewhere. Sure. Well a good project is never over. No,

29:07

I'll find something. Well that's fascinating. I appreciate you coming on the show. I appreciate

29:12

you letting me talk about this because I really like the feedback that I get. And there's

29:17

I need to add to this besides thanking you for the opportunity to have these discussions that I really enjoy. I would like to thank, of course, Tyath and Brent for the work that they've done on AIO to make it so easy to use and for adding all these features in AIO plus like, you know, Apple Weather Kit that I'm using now. But I also like to go back to like the first architecture that I put in place with the two-way radio kind of a setup. And I think that's really, really cool. And I think that's really, really cool. And I think that's really, really cool. And I think that's

29:47

up, that was made possible by a lot of work that Tony DiCola did, because he introduced

29:54

MicroPython into that environment very creatively and made that really useful. So I appreciate

30:01

all the work that he put into that and the leadership that he had shown back then to

30:05

see the possibility to put MicroPython on these little devices. And of course, the evolution

30:12

the CircuitPython has just made them even easier to use. And then Jerry N, Jerry Neal,

30:18

he was a developer for Apple back in those days, and I think he's a part-time developer now. Jerry N, his handle on Discord, he did some really breakthrough work in getting the two-way radio drivers for CircuitPython, and those were game-changers for me that got me into this whole rattle that I'm traveling through.

30:42

through now and having fun with the corrosion bond.

30:47

- That's great.

30:48

- So I wanna thank those people.

30:49

You know, the community has really been supportive

30:52

of all these things and giving me lots of suggestions

30:54

and ideas and so I appreciate that.

30:57

- I'll make sure I share the learn guides in the show notes

30:59

and hopefully you'll get some more feedback from it.

31:02

- That's super, it's something I look forward to.

31:04

- Jan, thanks so much for being on the show.

31:07

- Oh, you're welcome and thanks for having me.

31:10

- Thanks to Jan for coming on the show

31:12

his weather station, its architecture, and how CircuitPython and Adafruit I/O+ have helped

31:16

his project.

31:17

And remember what Jan said - if you have any feedback after listening or looking at the

31:21

project on the Adafruit Playground, let him know!

31:24

For show notes, transcripts, and more, visit www.circuitpythonshow.com.

31:29

Until next time, stay positive.

31:31

(electronic music)