# Make an AI Freezer Monitor

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/098/573/medium800/adafruit_io_Untitled.png?1610476437)

The AI Freezer Monitor is a DIY IoT monitor that uses machine learning (ML) to provide early warnings of potential equipment failure. This guide covers building the device, collecting training data, setting up email alerts, training a custom auto encoder machine learning model, and deploying the model to a Feather HUZZAH32 development board.

The project is designed to be functional for low temperature scientific freezers (-60 C), with the goal of reducing catastrophic failure and the need to keep backup freezers running full-time. However, please note that this project is primarily for demonstrative and educational purposes and has not gone through extensive testing.

_This project takes about two to three hours to fully complete. But the device will need to passively collect temperature data for about 30 days before you will be able to train the machine learning model._

## Parts
### Adafruit HUZZAH32 – ESP32 Feather Board (pre-soldered)

[Adafruit HUZZAH32 – ESP32 Feather Board (pre-soldered)](https://www.adafruit.com/product/3591)
Aww yeah, it's the Feather you have been waiting for, this time with **pre-assembled headers**! The **HUZZAH32** is our ESP32-based Feather, made with the official WROOM32 module. We packed everything you love about Feathers: built in USB-to-Serial converter,...

In Stock
[Buy Now](https://www.adafruit.com/product/3591)
[Related Guides to the Product](https://learn.adafruit.com/products/3591/guides)
![Angled Shot of the Adafruit HUZZAH32 – ESP32 Feather Board (pre-soldered).](https://cdn-shop.adafruit.com/640x480/3591-05.jpg)

### Adafruit MCP9600 I2C Thermocouple Amplifier

[Adafruit MCP9600 I2C Thermocouple Amplifier](https://www.adafruit.com/product/4101)
Thermocouples are very sensitive, requiring a good amplifier with a cold-compensation reference. The **Adafruit MCP9600** does all that for you, and can be easily interfaced with any microcontroller or single-board-computer with I2C. Inside, the chip handles all the analog stuff...

In Stock
[Buy Now](https://www.adafruit.com/product/4101)
[Related Guides to the Product](https://learn.adafruit.com/products/4101/guides)
![Angled shot of a square, blue, thermocouple amplifier with a green terminal block.](https://cdn-shop.adafruit.com/640x480/4101-04.jpg)

### Thermocouple Type-K Glass Braid Insulated

[Thermocouple Type-K Glass Braid Insulated](https://www.adafruit.com/product/270)
Thermocouples are best used for measuring temperatures that can go above 100 °C. This is a bare wires bead-probe which can measure air or surface temperatures. Most inexpensive thermocouples have a vinyl covering which can melt at around 200 °C, this one uses a fiberglass braid so it...

Out of Stock
[Buy Now](https://www.adafruit.com/product/270)
[Related Guides to the Product](https://learn.adafruit.com/products/270/guides)
![Angled shot of a Thermocouple Type-K Glass Braid Insulated wire. ](https://cdn-shop.adafruit.com/640x480/270-02.jpg)

### Half Sized Premium Breadboard - 400 Tie Points

[Half Sized Premium Breadboard - 400 Tie Points](https://www.adafruit.com/product/64)
This is a cute, half-size breadboard with&nbsp;400 tie points, good for small projects. It's 3.25" x 2.2" / 8.3cm&nbsp;x 5.5cm&nbsp;with a standard double-strip in the middle and two power rails on both sides.&nbsp;You can pull the power rails off easily to make the breadboard as...

In Stock
[Buy Now](https://www.adafruit.com/product/64)
[Related Guides to the Product](https://learn.adafruit.com/products/64/guides)
![Angled shot of half-size solderless breadboard with red and black power lines.](https://cdn-shop.adafruit.com/640x480/64-06.jpg)

### Premium Male/Male Jumper Wires - 40 x 3" (75mm)

[Premium Male/Male Jumper Wires - 40 x 3" (75mm)](https://www.adafruit.com/product/759)
Handy for making wire harnesses or jumpering between headers on PCB's. These premium jumper wires are 3" (75mm) long and come in a 'strip' of 40 (4 pieces of each of ten rainbow colors). They have 0.1" male header contacts on either end and fit cleanly next to each other...

In Stock
[Buy Now](https://www.adafruit.com/product/759)
[Related Guides to the Product](https://learn.adafruit.com/products/759/guides)
![Angled shot of Premium Male/Male Jumper Wires - 40 x 3 (75mm)](https://cdn-shop.adafruit.com/640x480/759-04.jpg)

### Micro USB to Micro USB OTG Cable - 10-12" / 25-30cm long

[Micro USB to Micro USB OTG Cable - 10-12" / 25-30cm long](https://www.adafruit.com/product/3610)
This cable is a little unusual, rather than having a USB A plug on one end, it has _two_ Micro B USB connections! What is this for? It's for when you have a "USB On-The-Go (OTG)" device, and you want to plug in another USB device. For example, a Pi Zero or Pi Zero W has a...

In Stock
[Buy Now](https://www.adafruit.com/product/3610)
[Related Guides to the Product](https://learn.adafruit.com/products/3610/guides)
![Micro USB to Micro USB OTG Cable](https://cdn-shop.adafruit.com/640x480/3610-01.jpg)

# Make an AI Freezer Monitor

## Build

This part of the tutorial covers everything you'll need to build and run your own freezer temperature monitor and alert system. We'll cover how to build the device, setting up a free online database, flashing code onto the device, monitoring the database and sending email alerts. The components used in this project can measure temperatures as low as -200 Celsius.

This part of the project takes about 60 to 90 minutes to build.

## Materials

a) Adafruit Feather Huzzah32

b) Adafruit MCP9600

c) Adafruit Type K Thermocouple

d) Jumper Wires

e) Breadboard&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/097/189/medium800/adafruit_io_allmaterials.jpg?1605894406)

## Build
1. Solder the screw terminal to the top side of your MCP9600.&nbsp;

![adafruit_io_build01.jpg](https://cdn-learn.adafruit.com/assets/assets/000/097/176/medium640/adafruit_io_build01.jpg?1605888372)

2. Solder the pins to the bottom side of the MCP9600.

_Tip: Put the_ _in the breadboard to hold them in place when soldering._

3. Insert the ESP32 and thermocouple amplifier into the breadboard.

4. Follow the wiring diagram below to connect the thermocouple amplifier to the ESP32 using your jumper wires.

![adafruit_io_build02.jpg](https://cdn-learn.adafruit.com/assets/assets/000/097/178/medium640/adafruit_io_build02.jpg?1605888585)

![Wiring diagram for the Feather Huzzah32 and MCP9600 thermocouple amplifier](https://cdn-learn.adafruit.com/assets/assets/000/097/179/medium800/adafruit_io_diagram.png?1605889766)

And a view when complete:

![](https://cdn-learn.adafruit.com/assets/assets/000/098/575/medium800/adafruit_io_Untitled.png?1610476894)

# Make an AI Freezer Monitor

## Code

## Prerequisite Internet Accounts

1. An Adafruit IO account, you can sign up for free account [here](https://accounts.adafruit.com/users/sign_up).  
1. An IFTTT Account, you can join IFTTT [here](https://ifttt.com/join).

## Software
Clone [this repo](https://github.com/microsoft/ai-freezer-monitor) to your computer, or you can download the directory for this project [here](https://github.com/microsoft/freezer-temp-monitor/archive/main.zip)

Once you downloaded the project files you'll need to create a **config.h** file and fill in your Adafruit IO and WiFi credentials.

1. In the **FreezerTempAlert** folder create a new text file called **config.h**
2. Copy and paste the code below into that that file and save:

```cpp
/************************ Adafruit IO Config *******************************/

// visit io.adafruit.com if you need to create an account,
// or if you need your Adafruit IO key.
#define IO_USERNAME "your-username"
#define IO_KEY "your-key"

/******************************* WIFI **************************************/

#define WIFI_SSID "your-ssid"
#define WIFI_PASS "your-password"

#include "AdafruitIO_WiFi.h"

AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);
```

3. Find your Adafruit IO credentials in the top right corner of the Adafruit IO webpage.

![](https://cdn-learn.adafruit.com/assets/assets/000/097/181/medium800/adafruit_io_iokeys.png?1605890346)

4. Copy and paste them in here between the quotes:

```cpp
#define IO_USERNAME "your_username"
#define IO_KEY "your_key"
```

_Remember to treat your key like a password_  
  
5. Next you will need to add the WiFi SSID, or network name, and the password. Note: The code doesn't support WiFi networks that use a captive portal.

```cpp
#define WIFI_SSID "your_ssid"
#define WIFI_PASS "your_pass"
```

6. Open **FreezerTempAlert.ino** and change the threshold temperature to the temperature you wanted to be alerted at. The default temperature is -50 Celsius.

```cpp
// Set the temperature you want to be alerted at
const float thresholdTemperature = -50;
```

Flashing the code

1. Follow the first section of this&nbsp;[guide](https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/)&nbsp;to add the ESP32 extension to the Arduino IDE.
2. Install the libraries listed below using Arduino's Library manager. If you have used the library manager before,&nbsp;[here](https://www.arduino.cc/en/guide/libraries)&nbsp;is a helpful guide.
  - Adafruit IO Arduino
  - Adafruit MCP9600
    - Note: If you're prompted to install other dependencies for these libraries, select&nbsp;_Install All_

3. With **FreezerTempAlert.ino** open in the Arduino IDE select&nbsp; **Tools \> Board \> Adafruit ESP32 Feather**
4. Select the active COM Port in&nbsp; **Tools \> Port**
5. Press the&nbsp;_Upload_&nbsp;button

[![Arduino upload button](https://github.com/microsoft/ai-freezer-monitor/raw/main/media/upload.png)](https://github.com/microsoft/ai-freezer-monitor/blob/main/media/upload.png)

6. Open the Arduino serial monitor to verify that everything is working properly on the board.

7. Go back to Adafruit.io and check that both the&nbsp;_temperature_&nbsp;feed and the&nbsp;_temp\_alert_&nbsp;feed were created.

## Setting up IFTTT

You'll use If This Then That (IFTTT) to set up automated alerts to your email any time the temperatures goes above a threshold. The threshold is set to -50c by default.

1. Log in to your IFTTT account and press the&nbsp; **Create** &nbsp;button in the top navigation.&nbsp;
2. Select the&nbsp; **+** &nbsp;button to add a trigger.

![](https://cdn-learn.adafruit.com/assets/assets/000/097/182/medium800/adafruit_io_ifttt02.png?1605892390)

3. Search for&nbsp; **Adafruit**

![](https://cdn-learn.adafruit.com/assets/assets/000/097/183/medium800/adafruit_io_ifttt03.png?1605892779)

4. Follow the prompts to connect and authenticate your Adafruit IO account.

5. Once your account is connected choose the&nbsp;_Any new data_&nbsp;trigger.

![](https://cdn-learn.adafruit.com/assets/assets/000/097/184/medium800/adafruit_io_ifttt04.png?1605892904)

6. Select&nbsp;_temp\_alert_ from the drop down menu and press _Create trigger_

![](https://cdn-learn.adafruit.com/assets/assets/000/097/185/medium800/adafruit_io_ifttt05.png?1605892983)

7. Select the next&nbsp; **+** &nbsp;to set your action.

![](https://cdn-learn.adafruit.com/assets/assets/000/097/186/medium800/adafruit_io_ifttt06.png?1605893238)

8. Scroll down or search for the&nbsp;_Email_&nbsp;action

_If this is the first time you're using the email action a pin will be sent to you to confirm that you are the owner of the email account._

![](https://cdn-learn.adafruit.com/assets/assets/000/097/187/medium800/adafruit_io_ifttt08.png?1605893432)

9. Customized the email message and select&nbsp;_create action_&nbsp; ![](https://learn.adafruit.com/media/ifttt09.png)

![](https://cdn-learn.adafruit.com/assets/assets/000/097/188/medium800/adafruit_io_ifttt09.png?1605894175)

10. Finally select&nbsp;_finish_, your IFTTT service is ready to go.

# Installing the monitor

Now that you project is built and your services are setup you can install the thermocouple in the freezer. You can use a binder clip or a magnet to keep it in place. The Feather Huzzah32 board should be kept outside the freezer. Many breadboards come with an adhesive back, you can use that to secure your project to the side of the freezer.

![](https://cdn-learn.adafruit.com/assets/assets/000/098/511/medium800/adafruit_io_Cover-2_%282%29.jpg?1610050140 Sensor installed in a home freezer to collect data)

# Make an AI Freezer Monitor

## Training an Anomaly Detector

Once you have 30 days of data from your freezer, you're ready to train a custom Machine Learning (ML) model! The goal of this model is to warn you before a freezer fails, giving you time to address the failure prior to losing critical work. To do this we'll use an auto-encoder algorithm.

### Environment Setup

We'll use Python to train the model. If you're new to Python, check out this&nbsp;[guide](https://docs.microsoft.com/en-us/learn/modules/intro-to-python/)&nbsp;for a quick introduction.

We'll also use several machine learning Python libraries. We recommend using these in a virtual environment as this will keep your global installation of Python clean and keep all the dependencies for this project in one place.

Download the **autoencoder\_training.ipynb** and either the **win\_python\_venv.bat** file for Windows or the **mac\_linux\_python\_venv.sh** for Mac or Linux files from [this repo.](https://github.com/microsoft/ai-freezer-monitor/tree/main/anomaly-detection-training) You may already have them if you cloned the repo in the previous step.

![](https://cdn-learn.adafruit.com/assets/assets/000/098/791/medium800/temperature___humidity_github_screen.png?1611180084)

### Python installation

You'll also need to install Python. Follow the links below to install Python for your appropriate operating system.

[Python 3.8.6 Windows Installation](https://www.python.org/ftp/python/3.8.6/python-3.8.6-amd64-webinstall.exe)

[Python 3.8.6 Mac Installation](https://www.python.org/ftp/python/3.8.6/python-3.8.6-macosx10.9.pkg)

### VS Code installation

You can use VS Code to view and run the Jupyter notebook that contains the anomaly detection training code. The notebook uses interactive Python, which walks you through the steps of the training the model. [This guide](https://code.visualstudio.com/docs/python/jupyter-support) will walk you through how to navigate Jupyter notebooks in VS Code Use this [link](https://code.visualstudio.com/) to download and install VS Code. After you install VS Code you will also need to install the [Python extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python).

## Python Virtual Environment Script

First open the Jupyter notebook in VS Code. Then open the terminal by pressing `ctrl + shift + ``&nbsp;in the new terminal window type `win_python_venv.bat` or `mac_linux_python_venv.sh` and press _enter_.

![](https://cdn-learn.adafruit.com/assets/assets/000/098/800/medium800/temperature___humidity_vscode.png?1611189829)

## Train Your Model

The rest of the tutorial is in the Jupyter notebook, make sure the new virtual environment you created is activated.

## About Autoencoders

An autoencoder is a type of compression algorithm that works well on the type of data it's trained on, but not so well on any other data. For anomaly detection, you can use this characteristic of the algorithm to check whether new data is similar to or different than the training data used.

The model is built using two parts: 1) an encoder, which compresses the data, and 2) a decoder, which decompresses the data. Decompression allows you to check the accuracy of the re-created data. A high error rate in re-created data is likely an anomaly.

## Further Reading

- [Autoencoder example from Keras](https://keras.io/examples/timeseries/timeseries_anomaly_detection/)
- [Autoencoder example from TensorFlow](https://www.tensorflow.org/tutorials/generative/autoencoder)
- [Anomaly detection project by Shawn Hymel](https://github.com/ShawnHymel/tinyml-example-anomaly-detection)

# Make an AI Freezer Monitor

## AI Freezer Monitor

With your model trained and exported to a C array you're ready to implement it on your Feather Huzzah 32. We'll need to update the software on our ESP32, but the hardware can stay the same. In fact, it is best to leave the thermocouple in the freezer since moving it may affect the results of the machine learning model.

## Code

Clone this repo to your computer, or you can download the directory for this project&nbsp;[here](https://github.com/microsoft/freezer-temp-monitor/archive/main.zip).

Once you have downloaded the project files, you'll need to create a **config.h** file and fill in your Adafruit IO and WiFi credentials.

1. In the&nbsp; **AIFreezerMonitor** &nbsp;folder create a new text file called&nbsp; **config.h**

2. Copy and paste the code below into that that file and save:

```cpp
/************************ Adafruit IO Config *******************************/

// visit io.adafruit.com if you need to create an account,
// or if you need your Adafruit IO key.
#define IO_USERNAME "your-username"
#define IO_KEY "your-key"

/******************************* WIFI **************************************/

#define WIFI_SSID "your-ssid"
#define WIFI_PASS "your-password"

#include "AdafruitIO_WiFi.h"

AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);
```

3. Find your Adafruit IO credentials in the top right corner of the Adafruit IO webpage.

![](https://cdn-learn.adafruit.com/assets/assets/000/098/449/medium800/adafruit_io_iokeys.png?1609804786)

4. Copy and paste them in here between the quotes:

```cpp
#define IO_USERNAME "your_username"
#define IO_KEY "your_key"
```

_Remember to treat your key like a password_

5. Next you will need to add the WiFi SSID, or network name, and the password. Note: The code doesn't support WiFi networks that use a captive portal.

```cpp
#define WIFI_SSID "your_ssid"
#define WIFI_PASS "your_pass"
```

6. Move the **model\_data.h** file you created earlier into the **AIFreezerMonitor** &nbsp;directory

## Flashing your board

1. Follow the first section of this&nbsp;[guide](https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/)&nbsp;to add the ESP32 extension to the Arduino IDE.

2. Install the libraries listed below using Arduino Library Manager. If you haven't used the library manager before,&nbsp;[here](https://www.arduino.cc/en/guide/libraries)&nbsp;is a helpful guide.

![](https://cdn-learn.adafruit.com/assets/assets/000/098/805/medium800/temperature___humidity_arduinoide.png?1611191752)

3. With **FreezerTempAlert.ino** open in the Arduino IDE select&nbsp; **Tools \> Board \> ESP32 Arduino \> Adafruit ESP32 Feather**

4. Select the active COM Port in&nbsp; **Tools \> Port**

5. Press the&nbsp;_Upload_&nbsp;button

![](https://cdn-learn.adafruit.com/assets/assets/000/098/450/medium800/adafruit_io_upload.png?1609805364)

## Installing

If you moved the thermocouple to upload the new code, do your best to re-install it in the same place. If the thermocouple is moved too far away from the training position, the ML model may mistake normal operation as an anomaly.

Your IFTTT warning should still be working the same as before, so you don't need to change anything there.

![](https://cdn-learn.adafruit.com/assets/assets/000/098/803/medium800/temperature___humidity_IMG_4682.jpg?1611191547 Feather Huzza32 installed on top of a fridge)

![](https://cdn-learn.adafruit.com/assets/assets/000/098/804/medium800/temperature___humidity_IMG_4683.jpg?1611191643)


## Featured Products

### Adafruit HUZZAH32 – ESP32 Feather Board

[Adafruit HUZZAH32 – ESP32 Feather Board](https://www.adafruit.com/product/3405)
Aww yeah, it's the Feather you have been waiting for! The **HUZZAH32** is our ESP32-based Feather, made with the official WROOM32 module. We packed everything you love about Feathers: built in USB-to-Serial converter, automatic bootloader reset, Lithium Ion/Polymer charger,...

In Stock
[Buy Now](https://www.adafruit.com/product/3405)
[Related Guides to the Product](https://learn.adafruit.com/products/3405/guides)
### Adafruit MCP9600 I2C Thermocouple Amplifier

[Adafruit MCP9600 I2C Thermocouple Amplifier](https://www.adafruit.com/product/4101)
Thermocouples are very sensitive, requiring a good amplifier with a cold-compensation reference. The **Adafruit MCP9600** does all that for you, and can be easily interfaced with any microcontroller or single-board-computer with I2C. Inside, the chip handles all the analog stuff...

In Stock
[Buy Now](https://www.adafruit.com/product/4101)
[Related Guides to the Product](https://learn.adafruit.com/products/4101/guides)
### Thermocouple Type-K Glass Braid Insulated Stainless Steel Tip

[Thermocouple Type-K Glass Braid Insulated Stainless Steel Tip](https://www.adafruit.com/product/3245)
Thermocouples are best used for measuring temperatures that can go above 100°C. This is a bare wires stainless-steel tip probe which can measure air or surface temperatures. Most inexpensive thermocouples have a vinyl covering which can melt at around 200°C, this one uses a fiberglass...

In Stock
[Buy Now](https://www.adafruit.com/product/3245)
[Related Guides to the Product](https://learn.adafruit.com/products/3245/guides)
### Half Sized Premium Breadboard - 400 Tie Points

[Half Sized Premium Breadboard - 400 Tie Points](https://www.adafruit.com/product/64)
This is a cute, half-size breadboard with&nbsp;400 tie points, good for small projects. It's 3.25" x 2.2" / 8.3cm&nbsp;x 5.5cm&nbsp;with a standard double-strip in the middle and two power rails on both sides.&nbsp;You can pull the power rails off easily to make the breadboard as...

In Stock
[Buy Now](https://www.adafruit.com/product/64)
[Related Guides to the Product](https://learn.adafruit.com/products/64/guides)
### Premium Male/Male Jumper Wires - 40 x 3" (75mm)

[Premium Male/Male Jumper Wires - 40 x 3" (75mm)](https://www.adafruit.com/product/759)
Handy for making wire harnesses or jumpering between headers on PCB's. These premium jumper wires are 3" (75mm) long and come in a 'strip' of 40 (4 pieces of each of ten rainbow colors). They have 0.1" male header contacts on either end and fit cleanly next to each other...

In Stock
[Buy Now](https://www.adafruit.com/product/759)
[Related Guides to the Product](https://learn.adafruit.com/products/759/guides)
### Micro USB to Micro USB OTG Cable - 10-12" / 25-30cm long

[Micro USB to Micro USB OTG Cable - 10-12" / 25-30cm long](https://www.adafruit.com/product/3610)
This cable is a little unusual, rather than having a USB A plug on one end, it has _two_ Micro B USB connections! What is this for? It's for when you have a "USB On-The-Go (OTG)" device, and you want to plug in another USB device. For example, a Pi Zero or Pi Zero W has a...

In Stock
[Buy Now](https://www.adafruit.com/product/3610)
[Related Guides to the Product](https://learn.adafruit.com/products/3610/guides)

## Related Guides

- [Adafruit HUZZAH32 - ESP32 Feather](https://learn.adafruit.com/adafruit-huzzah32-esp32-feather.md)
- [Adafruit MCP9600 I2C Thermocouple Amplifier](https://learn.adafruit.com/adafruit-mcp9600-i2c-thermocouple-amplifier.md)
- [CircuitPython Web Workflow Code Editor Quick Start](https://learn.adafruit.com/getting-started-with-web-workflow-using-the-code-editor.md)
- [NeoTrellis Feather Case Assembly](https://learn.adafruit.com/neotrellis-feather-case-assembly.md)
- [Halloween Skeleton Transformation Illusion Prop](https://learn.adafruit.com/halloween-skeleton-transformation-illusion-prop.md)
- [All the Internet of Things - Episode Two: Protocols](https://learn.adafruit.com/alltheiot-protocols.md)
- [Digital Inputs with Adafruit IO WipperSnapper](https://learn.adafruit.com/digital-inputs-with-adafruit-io-wippersnapper.md)
- [CircuitPython on ESP32 Quick Start](https://learn.adafruit.com/circuitpython-with-esp32-quick-start.md)
- [All the Internet of Things - Episode Four: Adafruit IO](https://learn.adafruit.com/all-the-internet-of-things-episode-four-adafruit-io.md)
- [No-Code IoT Door Alarm with WipperSnapper](https://learn.adafruit.com/no-code-iot-door-alarm-with-wippersnapper.md)
- [Introducing Adafruit Feather](https://learn.adafruit.com/adafruit-feather.md)
- [EZ Make Oven](https://learn.adafruit.com/ez-make-oven.md)
- [Adafruit IO Basics: Schedule Actions](https://learn.adafruit.com/adafruit-io-basics-scheduled-triggers.md)
- [IoT Temperature Logger with Analog Devices ADT7410, Feather and Adafruit IO](https://learn.adafruit.com/iot-temperature-logger-with-arduino-and-adafruit-io.md)
- [MAC Address Finder](https://learn.adafruit.com/mac-address-finder.md)
