diff --git a/.github/actions/platformio/action.yml b/.github/actions/platformio/action.yml index c86a946d..44fb1640 100644 --- a/.github/actions/platformio/action.yml +++ b/.github/actions/platformio/action.yml @@ -7,7 +7,7 @@ inputs: runs: using: "composite" steps: - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: | ~/.cache/pip diff --git a/.github/workflows/CI-PRs-and-main.yml b/.github/workflows/CI-PRs-and-main.yml index 1b8eb0f3..6dee8618 100644 --- a/.github/workflows/CI-PRs-and-main.yml +++ b/.github/workflows/CI-PRs-and-main.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: crazy-max/ghaction-dump-context@v1 - uses: actions/checkout@v2 - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: | node_modules @@ -25,7 +25,7 @@ jobs: key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: ${{ github.workspace }}/.next/cache # Generate a new cache whenever packages or source files change. diff --git a/01-indoor-floor-level-tracker/README.md b/01-indoor-floor-level-tracker/README.md index deeddd9d..1d2c3321 100644 --- a/01-indoor-floor-level-tracker/README.md +++ b/01-indoor-floor-level-tracker/README.md @@ -64,7 +64,7 @@ setting up your hardware. The following hardware is required to run the Indoor Floor-Level Tracker. -* [Blues Starter Kit](https://shop.blues.io/collections/blues-starter-kits) +* [Blues Starter Kit](https://shop.blues.com/collections/blues-starter-kits?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [BMP581](https://www.sparkfun.com/products/20170) * [Qwiic Cable](https://www.sparkfun.com/products/14427) diff --git a/01-indoor-floor-level-tracker/firmware/README.md b/01-indoor-floor-level-tracker/firmware/README.md index 1e199a55..4c71db81 100644 --- a/01-indoor-floor-level-tracker/firmware/README.md +++ b/01-indoor-floor-level-tracker/firmware/README.md @@ -35,7 +35,7 @@ Complete the following steps to upload firmware in in PlatformIO. 1. Connect your Swan to your computer using [these steps](https://dev.blues.io/quickstart/swan-quickstart/#programming-swan-platformio). > **NOTE**: The project’s default configuration assumes you’re using an -[STLINK-V3MINI programmer and debugger](https://shop.blues.io/products/stlink-v3mini). +[STLINK-V3MINI programmer and debugger](https://shop.blues.com/products/stlink-v3mini?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). If you’re not, make sure to open your `platformio.ini` file and change the `upload_protocol` to `dfu`. @@ -72,4 +72,4 @@ to attach a LiPo battery to the Notecarrier-F so you take your hardware away fro computer for testing. When you are testing you can manually view events as they come in on Notehub, but it’s -far easier to monitor your devices in this project’s web application. \ No newline at end of file +far easier to monitor your devices in this project’s web application. diff --git a/01-indoor-floor-level-tracker/web-app/README.md b/01-indoor-floor-level-tracker/web-app/README.md index 043835bd..2c36cca5 100644 --- a/01-indoor-floor-level-tracker/web-app/README.md +++ b/01-indoor-floor-level-tracker/web-app/README.md @@ -12,7 +12,7 @@ IDE, and then complete the following steps. - [Development](#development) > **NOTE**: The Indoor Floor-Level Tracker’s web app uses the [Notehub API](https://dev.blues.io/guides-and-tutorials/using-the-notehub-api/) -to retrieve event data, which consumes [Notehub consumption credits](https://blues.io/pricing/). +to retrieve event data, which consumes [Notehub consumption credits](https://blues.com/pricing/). You can change how frequently the app refreshes data from Notehub by altering the `MS_REFETCH_INTERVAL` constant in the [`src/pages/index.tsx`](src/pages/index.tsx) file. diff --git a/01-indoor-floor-level-tracker/web-app/src/components/layout/Footer.tsx b/01-indoor-floor-level-tracker/web-app/src/components/layout/Footer.tsx index 50cc3c8b..bd6a66e4 100644 --- a/01-indoor-floor-level-tracker/web-app/src/components/layout/Footer.tsx +++ b/01-indoor-floor-level-tracker/web-app/src/components/layout/Footer.tsx @@ -12,7 +12,7 @@ const FooterComponent = () => { @@ -30,7 +30,7 @@ const FooterComponent = () => { diff --git a/01-indoor-floor-level-tracker/web-app/src/pages/index.tsx b/01-indoor-floor-level-tracker/web-app/src/pages/index.tsx index 16d13830..d786a9b6 100644 --- a/01-indoor-floor-level-tracker/web-app/src/pages/index.tsx +++ b/01-indoor-floor-level-tracker/web-app/src/pages/index.tsx @@ -25,7 +25,7 @@ type HomeData = { const Home: NextPage = ({ fleetTrackerConfig, error }) => { // How often to refetch data from Notehub (in milliseconds). Note that // reading data with the Notehub API uses one consumption credit per event - // (see https://blues.io/pricing/). + // (see https://blues.com/pricing/). const MS_REFETCH_INTERVAL = 60 * 1000; const [isLoading, setIsLoading] = useState(false); diff --git a/02-fridge-fleet-monitor/README.md b/02-fridge-fleet-monitor/README.md index d8c121be..4bff115f 100644 --- a/02-fridge-fleet-monitor/README.md +++ b/02-fridge-fleet-monitor/README.md @@ -15,7 +15,7 @@ To run this project yourself you'll need to: The following hardware is required to run the Fridge Fleet Monitor. -* [Blues Starter Kit for LoRaWAN](https://shop.blues.com/products/blues-starter-kit-lorawan) +* [Blues Starter Kit for LoRaWAN](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [Raspberry Pi Pico](https://www.adafruit.com/product/4864) * [Adafruit magnetic contact switch (door sensor) x 2](https://www.adafruit.com/product/375) * [DHT-11 Temperature and Humidity Sensor](https://www.amazon.com/SHILLEHTEK-Temperature-Humidity-Sensor-Module/dp/B0CN5RP8SL) @@ -23,7 +23,7 @@ The following hardware is required to run the Fridge Fleet Monitor. ## LoRaWAN Gateway Setup -Before you can use the Notecard LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) +Before you can use the Notecard for LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) ## Firmware diff --git a/03-better-mouse-trap/README.md b/03-better-mouse-trap/README.md index e53ace9d..59265ac2 100644 --- a/03-better-mouse-trap/README.md +++ b/03-better-mouse-trap/README.md @@ -1,6 +1,6 @@ # Better Mouse Trap -**Warning: This project uses Sparrow, a Blues product that is no longer under active development. We are working on updating this project to the successors of Sparrow: [Notecard LoRa](https://blues.com/notecard-lora/) and the [LoRaWAN Starter Kit](https://shop.blues.com/products/blues-starter-kit-lorawan). In the meantime, if you would like assistance building a Better Mouse Trap feel free to reach out on [our community forum](https://discuss.blues.com/).** +**Warning: This project uses Sparrow, a Blues product that is no longer under active development. We are working on updating this project to the successors of Sparrow: [Notecard for LoRa](https://blues.com/notecard-lora/) and the [LoRaWAN Starter Kit](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). In the meantime, if you would like assistance building a Better Mouse Trap feel free to reach out on [our community forum](https://discuss.blues.com/).** A smarter mouse trap with SMS alerting. @@ -18,7 +18,7 @@ it has caught a mouse. ### Parts - [Victor M333 Humane Mouse Trap](https://www.amazon.com/gp/product/B004CMNWES) -- [Blues WiFi + LoRa Dev Kit (Sparrow)](https://shop.blues.io/products/sparrow-dev-kit) +- Blues WiFi + LoRa Dev Kit (Sparrow) - [Clear Polycarbonate Sheet 1/16-in](https://www.amazon.com/gp/product/B07MQTDF4R) - [M3-threaded Nylon Standoff Kit](https://www.amazon.com/gp/product/B07KP2ZFNJ) @@ -54,7 +54,7 @@ The Sparrow kit's PIR sensors and factory firmware are perfect to detect motion in a mousetrap like this. When the Sparrow sensor detects motion, it creates a message. The Sparrow -gateway, thanks to the onboard Notecard, forwards the message through Wi-Fi to +gateway, thanks to the onboard Notecard, forwards the message through WiFi to my home router. ![View inside the trap showing underside of lid](images/nf3_mousetrap_(8)_gUpTQaXMpg.jpg) @@ -72,7 +72,7 @@ Notehub doesn’t have native SMS alerts yet, but it does allow you to route mes To correctly format the request for the Twilio HTTP API I followed the Blues [Twilio SMS Guide](https://dev.blues.io/guides-and-tutorials/twilio-sms-guide/?&utm_source=github&utm_medium=web&utm_campaign=nf&utm_content=nf3) and [modified the JSONata](mousetrap.jsonata) expression to tell me which mousetrap (Garage, Basement, etc.) saw motion based on the unique ID of the Sparrow sensor node I affixed to each trap. -![Data path from Wi-Fi to Notehub.io and JSONata transformation into SMS format](images/nf3_mousetrap_(18)_sghXhszUbO.jpg) +![Data path from WiFi to Notehub.io and JSONata transformation into SMS format](images/nf3_mousetrap_(18)_sghXhszUbO.jpg) ## System Test diff --git a/04-low-power-digital-signage/README.md b/04-low-power-digital-signage/README.md index eb864408..0034dac5 100644 --- a/04-low-power-digital-signage/README.md +++ b/04-low-power-digital-signage/README.md @@ -57,13 +57,13 @@ setting up your hardware. The following hardware is required to run the Low Power Digital Signage project. -* [Blues Notecard](https://shop.blues.io/collections/notecard) -* [Blues Notecarrier B](https://shop.blues.io/products/carr-b) -* [Blues Swan](https://shop.blues.io/collections/swan/products/swan) +* [Blues Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Blues Notecarrier B](https://shop.blues.com/products/carr-b?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Blues Swan](https://shop.blues.com/collections/swan/products/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [2.13" Tri-Color e-Ink Display FeatherWing](https://www.adafruit.com/product/4814) * [Qwiic Cable](https://www.sparkfun.com/products/14427) * A MicroSD card if you plan to display bitmap images on the screen. -* 2x LiPo Batteries of any size, like [these](https://www.adafruit.com/product/328) from Adafruit or [from Blues](https://shop.blues.io/collections/accessories). +* 2x LiPo Batteries of any size, like [these](https://www.adafruit.com/product/328) from Adafruit or [from Blues](https://shop.blues.com/collections/accessories?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). Additionally, if you want to place the project on a stand, [this 3D printed stand](https://learn.adafruit.com/eink-featherwing-display-stand) is perfect for the 2.13" display. You'll also need some [M2.5 thread machine screws and nuts to connect the display to the stand](https://www.adafruit.com/product/3299). @@ -101,4 +101,4 @@ You'll also need your Notehub project's UID, which you can find in the `Settings ```bash ./update-device.sh -p app:1234 -d dev:5678 -t -i 45 -v 'Hello Notecard!;banner-ad.bmp;bluesio.bmp;Happy Wednesday;notecard_8bit.bmp;bw_logo.bmp;icon.bmp;logo.bmp;notecard.bmp' -```` \ No newline at end of file +```` diff --git a/04-low-power-digital-signage/firmware/README.md b/04-low-power-digital-signage/firmware/README.md index 05e31c13..43bb795d 100644 --- a/04-low-power-digital-signage/firmware/README.md +++ b/04-low-power-digital-signage/firmware/README.md @@ -35,7 +35,7 @@ Complete the following steps to upload firmware in in PlatformIO. 1. Connect your Swan to your computer using [these steps](https://dev.blues.io/quickstart/swan-quickstart/#programming-swan-platformio). > **NOTE**: The project’s default configuration assumes you’re using an -[STLINK-V3MINI programmer and debugger](https://shop.blues.io/products/stlink-v3mini). +[STLINK-V3MINI programmer and debugger](https://shop.blues.com/products/stlink-v3mini?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). If you’re not, make sure to open your `platformio.ini` file and change the `upload_protocol` to `dfu`. @@ -67,4 +67,4 @@ Additionally, the firmware sends outbound Notes to the Notecard and Notehub in s Once you have the firmware running, you'll want to set the environment variables above to test the application. If you want to deploy this app to multiple devices for fleet testing, make sure you attach a LiPo battery to both the Swan and Notecarrier B. -When you are testing you can manually view events as they come in on Notehub, and use the UI or included scripts to update environment variables. \ No newline at end of file +When you are testing you can manually view events as they come in on Notehub, and use the UI or included scripts to update environment variables. diff --git a/04-low-power-digital-signage/firmware/lib/Adafruit EPD/src/Adafruit_EPD.h b/04-low-power-digital-signage/firmware/lib/Adafruit EPD/src/Adafruit_EPD.h index e5959346..10a5a612 100644 --- a/04-low-power-digital-signage/firmware/lib/Adafruit EPD/src/Adafruit_EPD.h +++ b/04-low-power-digital-signage/firmware/lib/Adafruit EPD/src/Adafruit_EPD.h @@ -40,6 +40,7 @@ enum { EPD_GRAY, ///< gray color ('red' on grayscale) EPD_DARK, ///< darker color EPD_LIGHT, ///< lighter color + EPD_YELLOW, ///< yellow color (for quad-color displays) EPD_NUM_COLORS }; @@ -48,6 +49,7 @@ typedef enum { THINKINK_TRICOLOR, THINKINK_GRAYSCALE4, THINKINK_MONO_PARTIAL, + THINKINK_QUADCOLOR, } thinkinkmode_t; #define EPD_swap(a, b) \ diff --git a/04-low-power-digital-signage/firmware/platformio.ini b/04-low-power-digital-signage/firmware/platformio.ini index 7b230c79..b553f52f 100644 --- a/04-low-power-digital-signage/firmware/platformio.ini +++ b/04-low-power-digital-signage/firmware/platformio.ini @@ -16,7 +16,7 @@ build_flags = upload_protocol = stlink monitor_speed = 115200 framework = arduino -lib_deps = +lib_deps = blues/Blues Wireless Notecard@^1.3.13 adafruit/Adafruit ImageReader Library@^2.8.1 adafruit/Adafruit GFX Library@^1.11.3 diff --git a/05-analog-signage/README.md b/05-analog-signage/README.md index 24739195..b2c80ba2 100644 --- a/05-analog-signage/README.md +++ b/05-analog-signage/README.md @@ -1,9 +1,9 @@ # Connected Analog Signage -Use the Notecard and a Wi-Fi-capable MCU to update character values on an analog split-flap display. +Use the Notecard and a WiFi-capable MCU to update character values on an analog split-flap display. This project is built around a hypothetical entity, "Blues Railway," which manages a number of train stations throughout the United States. Each station contains a set of analog split-flap displays that provide visitors with real-time departure -information like city, track, time, and whether there is a delay. Departure information is set across the station using Fleet-level Notehub environment variables. Variable changes are sent to the Notecard and delivered to a Host MCU. The host MCU then uses its on-board Wi-Fi connection to communicate with the signs in the facility and update the displayed information. +information like city, track, time, and whether there is a delay. Departure information is set across the station using Fleet-level Notehub environment variables. Variable changes are sent to the Notecard and delivered to a Host MCU. The host MCU then uses its on-board WiFi connection to communicate with the signs in the facility and update the displayed information. ![](images/banner.gif) @@ -57,9 +57,9 @@ setting up your hardware. The following hardware is required to run the Analog Signage demo. -* [Notecarrier F](https://shop.blues.io/products/notecarrier-f) -* [Notecard](https://shop.blues.io/collections/notecard) -* [FeatherS2 ESP32-S2 From Unexpected Maker](https://feathers2.io) or equivalent ESP32/Wi-Fi capable MCU. +* [Notecarrier F](https://shop.blues.com/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [FeatherS2 ESP32-S2 From Unexpected Maker](https://feathers2.io) or equivalent ESP32/WiFi capable MCU. * [Vestaboard](https://www.vestaboard.com/) or equivalent split-flap display. Please note that the included firmware is optimized for the FeatherS2 MCU and Vestaboard, and will need to be customized if you select different hardware. diff --git a/05-analog-signage/firmware/README.md b/05-analog-signage/firmware/README.md index c217faac..7464d924 100644 --- a/05-analog-signage/firmware/README.md +++ b/05-analog-signage/firmware/README.md @@ -21,13 +21,13 @@ The Analog Signage Demo's firmware is built using [CircuitPython](https://circui The `.py` files in this directory contain the complete working source for this demo. -- `secrets.py` contains Wi-Fi SSID and Password information, as well as the IP address and [API key for your Vestaboard](https://docs.vestaboard.com/local). You will need to update the placeholder values in this file before you run the app. +- `secrets.py` contains WiFi SSID and Password information, as well as the IP address and [API key for your Vestaboard](https://docs.vestaboard.com/local). You will need to update the placeholder values in this file before you run the app. - `code.py` is the main application and should either be incorporated into the `code.py` file of your MCU or dragged onto the `CIRCUITPY` drive to overwrite the default file. This file contains application logic for: - Connecting to the Notecard and configuring its connection (don't forget to set your [Notehub ProductUID](https://dev.blues.io/notehub/notehub-walkthrough/#finding-a-productuid) in this app or using the REPL at [dev.blues.io](https://dev.blues.io)). - - Connecting to a local Wi-Fi network. - - Communicating with the Vestaboard over the local Wi-Fi Network. + - Connecting to a local WiFi network. + - Communicating with the Vestaboard over the local WiFi Network. - Polling for environment variable changes and updating local application state when new variables are detected. - Mapping environment variable values to the [array](https://docs.vestaboard.com/local) and [character code format](https://docs.vestaboard.com/characters) expected by the Vestaboard API. - Sending updated information to the Vestaboard. - `vestaboard.py` contains helper objects for board setup as well as a character codes dictionary that maps letters, digits, characters and colors to the Vestaboard character code format. -- `feathers2.py` contains helper functions for working with devices on the FeatherS2. This file and references to it can be deleted if using another Wi-Fi host. +- `feathers2.py` contains helper functions for working with devices on the FeatherS2. This file and references to it can be deleted if using another WiFi host. diff --git a/05-analog-signage/firmware/code.py b/05-analog-signage/firmware/code.py index 3b446539..7a29db18 100755 --- a/05-analog-signage/firmware/code.py +++ b/05-analog-signage/firmware/code.py @@ -16,17 +16,14 @@ next_poll_sec = 0 last_modified_time = 0 -application_state = { - "lines": {}, - "variables_updated": False -} +application_state = {"lines": {}, "variables_updated": False} # Make sure the 2nd LDO is turned on feathers2.enable_LDO2(True) i2c = board.I2C() card = notecard.OpenI2C(i2c, 0, 0, debug=False) -card.SetAppUserAgent({"app":"nf5"}) +card.SetAppUserAgent({"app": "nf5"}) req = {"req": "hub.set", "mode": "continuous", "sync": True} card.Transaction(req) @@ -75,22 +72,22 @@ def map_env_vars(): row_state = [] key_index = int(key[-1]) + 1 - if value['delay'] is 'true': - row_state.extend([vestaboard.character_codes['red'], 0]) + if value["delay"] is "true": + row_state.extend([vestaboard.character_codes["red"], 0]) else: - row_state.extend([vestaboard.character_codes['green'], 0]) + row_state.extend([vestaboard.character_codes["green"], 0]) - for _, char in enumerate(value['city']): + for _, char in enumerate(value["city"]): row_state.append(vestaboard.character_codes[char]) row_state.extend([0, 0, 0]) - for _, char in enumerate(value['track']): + for _, char in enumerate(value["track"]): row_state.append(vestaboard.character_codes[char]) row_state.extend([0, 0, 0, 0, 0]) - for _, char in enumerate(value['time']): + for _, char in enumerate(value["time"]): row_state.append(vestaboard.character_codes[char]) - row_state.extend([0,0,0,0,0]) + row_state.extend([0, 0, 0, 0, 0]) updated_board[key_index] = row_state @@ -101,19 +98,23 @@ def setup_board(req): print("Setting up Vestaboard") board_state = str(vestaboard.base_board) - board_headers = {"X-Vestaboard-Local-Api-Key": secrets['vestaboard_key']} - response = req.post(secrets['vestaboard_url'], headers=board_headers, data=board_state) + board_headers = {"X-Vestaboard-Local-Api-Key": secrets["vestaboard_key"]} + response = req.post( + secrets["vestaboard_url"], headers=board_headers, data=board_state + ) - print(response.status_code, ' - ' if response.text else '', response.text) + print(response.status_code, " - " if response.text else "", response.text) def update_board(req, board_data): print("Updating Vestaboard") - board_headers = {"X-Vestaboard-Local-Api-Key": secrets['vestaboard_key']} - response = req.post(secrets['vestaboard_url'], headers=board_headers, data=str(board_data)) + board_headers = {"X-Vestaboard-Local-Api-Key": secrets["vestaboard_key"]} + response = req.post( + secrets["vestaboard_url"], headers=board_headers, data=str(board_data) + ) - print(response.status_code, ' - ' if response.text else '', response.text) + print(response.status_code, " - " if response.text else "", response.text) fetch_environment_variables() @@ -121,8 +122,8 @@ def update_board(req, board_data): print("\nAnalog Display Demo") print("-------------------\n") -print("joining Wi-Fi network...") -wifi.radio.connect(ssid=secrets['ssid'], password=secrets['passwd']) +print("joining WiFi network...") +wifi.radio.connect(ssid=secrets["ssid"], password=secrets["passwd"]) print("IP addr:", wifi.radio.ipv4_address) @@ -133,7 +134,9 @@ def update_board(req, board_data): setup_board(request) while True: - update_env_vars, next_poll_sec, last_modified_time = poll_environment_variables(next_poll_sec, last_modified_time) + update_env_vars, next_poll_sec, last_modified_time = poll_environment_variables( + next_poll_sec, last_modified_time + ) if update_env_vars: fetch_environment_variables() diff --git a/06-parking-lot-help-request/README.md b/06-parking-lot-help-request/README.md index 953a87b5..aee42a09 100644 --- a/06-parking-lot-help-request/README.md +++ b/06-parking-lot-help-request/README.md @@ -18,8 +18,8 @@ To run this project yourself you'll need to: The following hardware is required to run the Parking Lot Help Request application. -* [Notecarrier A with pre-soldered headers](https://shop.blues.io/products/carr-al) -* [Cellular Notecard](https://shop.blues.io/collections/notecard) (LTE Cat-1 versions are highly recommended) +* [Notecarrier A with pre-soldered headers](https://shop.blues.com/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Cellular Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [Sparkfun RGB LED breakout - WS2812B](https://www.sparkfun.com/products/13282) * [Twidec 12mm momentary push button with pre-soldered wires](https://www.amazon.com/gp/product/B08JHW8BPV/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&th=1) * [LiPo battery](https://www.adafruit.com/product/2011) diff --git a/07-piston-pump-motion-monitoring/README.md b/07-piston-pump-motion-monitoring/README.md index 52012012..08d5946d 100644 --- a/07-piston-pump-motion-monitoring/README.md +++ b/07-piston-pump-motion-monitoring/README.md @@ -23,9 +23,9 @@ The Piston Pump Motion Monitor runs on top of Notehub. As such, to run this samp The following hardware is required to run the Piston Pump Motion Monitor. -* [Blues Notecard](https://shop.blues.io/collections/notecard) -* [Blues Notecarrier B](https://shop.blues.io/products/carr-b) -* A LiPo Battery of any size, like [this one](https://www.adafruit.com/product/328) from Adafruit or [from Blues](https://shop.blues.io/collections/accessories). +* [Blues Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Blues Notecarrier B](https://shop.blues.com/products/carr-b?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* A LiPo Battery of any size, like [this one](https://www.adafruit.com/product/328) from Adafruit or [from Blues](https://shop.blues.com/collections/accessories?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). > **NOTE**: For a detailed look at how to connect the hardware, refer to the [Notecard and Notecarrier B quickstart guide](https://dev.blues.io/quickstart/notecard-quickstart/notecard-and-notecarrier-x/). diff --git a/08-power-quality-monitor/README.md b/08-power-quality-monitor/README.md index 6f1d4fb7..a46e7f9d 100644 --- a/08-power-quality-monitor/README.md +++ b/08-power-quality-monitor/README.md @@ -13,11 +13,11 @@ For organizations that rely on machinery for their day-to-day operations, an out This app provides a simple to construct power monitoring device that can be placed in-line with any AC-based machine. Using off-the-shelf hardware and modular components, this solution can be used to add monitoring to a machine regardless of its age or on-board monitoring capability. The hardware and firmware monitor AC energy data (RMS Current, RMS Voltage, Power Factor, Line Frequency, Active/Reactive/Apparent Power) and send regular readings, changes, and configurable alerts to the Notecard and on to Notehub. ## You Will Need - * A [Blues Starter Kit](https://shop.blues.io/collections/blues-starter-kits), that contains amongst other things - * [Notecarrier F](https://shop.blues.io/products/notecarrier-f) - * [Swan](https://shop.blues.io/collections/swan) - * [Notecard](https://shop.blues.io/collections/notecard) - * [Molex Cellular Antenna](https://shop.blues.io/collections/accessories/products/flexible-cellular-or-wi-fi-antenna) + * A [Blues Starter Kit](https://shop.blues.com/collections/blues-starter-kits?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link), that contains amongst other things + * [Notecarrier F](https://shop.blues.com/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Swan](https://shop.blues.com/collections/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Molex Cellular Antenna](https://shop.blues.com/collections/accessories/products/flexible-cellular-or-wi-fi-antenna?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [Dr. Wattson Energy Monitoring Board](https://www.upbeatlabs.com/wattson/) * [ProtoStax Enclosure for Dr. Wattson](https://www.protostax.com/products/) or similar enclosure * A [female-to-JST qwiic cable assembly](https://www.adafruit.com/product/4397) diff --git a/09-valve-monitor/README.md b/09-valve-monitor/README.md index fd7667da..0df8f12b 100644 --- a/09-valve-monitor/README.md +++ b/09-valve-monitor/README.md @@ -63,7 +63,7 @@ setting up your hardware. The following hardware is required to run the Valve Monitor project. -* A [Blues Starter Kit](https://shop.blues.io/collections/blues-starter-kits). +* A [Blues Starter Kit](https://shop.blues.com/collections/blues-starter-kits?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). * A flow meter, such as this [GREDIA Quick Connect Water Flow Sensor](https://www.amazon.com/dp/B07RD4JXLY/ref=cm_sw_r_api_i_652XGBZAS7RN06BSSHRT_0). * A solenoid valve, such as this [DIGITEN Inlet Feed Water Solenoid Valve](https://www.amazon.com/dp/B016MP1HX0/ref=cm_sw_r_api_i_6PW0RXB6569QB10RY51V_0). * If you do get the DIGITEN valve, make sure you also have [spade cables](https://www.amazon.com/dp/B08F784R9W/ref=cm_sw_r_api_i_3GMNPATKY77AAC247J9S_0) diff --git a/09-valve-monitor/firmware/arduino/README.md b/09-valve-monitor/firmware/arduino/README.md index 579647f5..dc16fc1b 100644 --- a/09-valve-monitor/firmware/arduino/README.md +++ b/09-valve-monitor/firmware/arduino/README.md @@ -35,7 +35,7 @@ Complete the following steps to upload firmware in PlatformIO. 1. Connect your Swan to your computer using [these steps](https://dev.blues.io/feather-mcus/swan/using-platformio-with-swan). > **NOTE**: The project’s default configuration assumes you’re using an -[STLINK-V3MINI programmer and debugger](https://shop.blues.io/products/stlink-v3mini). +[STLINK-V3MINI programmer and debugger](https://shop.blues.com/products/stlink-v3mini?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). If you’re not, make sure to open your `platformio.ini` file and change the `upload_protocol` to `dfu`. @@ -104,4 +104,4 @@ an alarm if the valve is closed and flow is detected (i.e. it’s leaking). "valve_state": "closed", "reason": "leak" // or "high" or "low" } -``` \ No newline at end of file +``` diff --git a/09-valve-monitor/firmware/zephyr/README.md b/09-valve-monitor/firmware/zephyr/README.md index 1bb1e882..e3d26665 100644 --- a/09-valve-monitor/firmware/zephyr/README.md +++ b/09-valve-monitor/firmware/zephyr/README.md @@ -10,7 +10,7 @@ Follow the sections [Creating a New Project](../../#creating-a-new-project) and ### Hardware -Follow the [hardware setup guide](../../#hardware). You will also need an [STLINK-V3MINI](https://shop.blues.io/products/stlink-v3mini) to flash the firmware onto the Swan. The STLINK will also allow you to debug the firmware. Connect the STLINK's ribbon connector to the Swan and to your development PC with a micro USB cable. +Follow the [hardware setup guide](../../#hardware). You will also need an [STLINK-V3MINI](https://shop.blues.com/products/stlink-v3mini?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) to flash the firmware onto the Swan. The STLINK will also allow you to debug the firmware. Connect the STLINK's ribbon connector to the Swan and to your development PC with a micro USB cable. ### Firmware diff --git a/09-valve-monitor/web-app/src/components/layout/Footer.tsx b/09-valve-monitor/web-app/src/components/layout/Footer.tsx index 3f856982..f72bf0fd 100644 --- a/09-valve-monitor/web-app/src/components/layout/Footer.tsx +++ b/09-valve-monitor/web-app/src/components/layout/Footer.tsx @@ -12,7 +12,7 @@ const FooterComponent = () => { @@ -30,7 +30,7 @@ const FooterComponent = () => { diff --git a/10-flow-rate-monitor/README.md b/10-flow-rate-monitor/README.md index 1a102f89..dddf9829 100644 --- a/10-flow-rate-monitor/README.md +++ b/10-flow-rate-monitor/README.md @@ -61,7 +61,7 @@ setting up your hardware. The following hardware is required to run the Flow Rate Monitor project. -* A [Blues Starter Kit](https://shop.blues.io/collections/blues-starter-kits). +* A [Blues Starter Kit](https://shop.blues.com/collections/blues-starter-kits?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). * A flow meter, such as this [GREDIA Quick Connect Water Flow Sensor](https://www.amazon.com/dp/B07RD4JXLY/ref=cm_sw_r_api_i_652XGBZAS7RN06BSSHRT_0). * Tubing for moving liquid throughout your hardware, such as this [1/4 OD silicone tubing](https://www.amazon.com/dp/B09H4RNGGG/ref=cm_sw_r_api_i_H171CC4D2EDPPM23X8A4_0?th=1). @@ -110,4 +110,4 @@ browser. ![The Valve Monitor project’s web application](images/web-app.png) As a final step, complete the [web app’s setup guide](web-app/) to get the app running -on your development machine. \ No newline at end of file +on your development machine. diff --git a/10-flow-rate-monitor/firmware/README.md b/10-flow-rate-monitor/firmware/README.md index 3114bbd0..5f7b1aa5 100644 --- a/10-flow-rate-monitor/firmware/README.md +++ b/10-flow-rate-monitor/firmware/README.md @@ -37,7 +37,7 @@ Complete the following steps to upload firmware in PlatformIO. 1. Connect your Swan to your computer using [these steps](https://dev.blues.io/feather-mcus/swan/using-platformio-with-swan). > **NOTE**: The project’s default configuration assumes you’re using an -[STLINK-V3MINI programmer and debugger](https://shop.blues.io/products/stlink-v3mini). +[STLINK-V3MINI programmer and debugger](https://shop.blues.com/products/stlink-v3mini?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). If you’re not, make sure to open your `platformio.ini` file and change the `upload_protocol` to `dfu`. @@ -92,4 +92,4 @@ environment variables, and the valve state is open. "flow_rate": 10.0, "reason": "high" // or "low" } -``` \ No newline at end of file +``` diff --git a/10-flow-rate-monitor/web-app/src/components/layout/Footer.tsx b/10-flow-rate-monitor/web-app/src/components/layout/Footer.tsx index 40fa2c09..1fbfdd27 100644 --- a/10-flow-rate-monitor/web-app/src/components/layout/Footer.tsx +++ b/10-flow-rate-monitor/web-app/src/components/layout/Footer.tsx @@ -12,7 +12,7 @@ const FooterComponent = () => { @@ -30,7 +30,7 @@ const FooterComponent = () => { diff --git a/11-generator-activity-monitor/README.md b/11-generator-activity-monitor/README.md index 975d0f1e..608ee9ba 100644 --- a/11-generator-activity-monitor/README.md +++ b/11-generator-activity-monitor/README.md @@ -4,12 +4,12 @@ Monitor a generator’s input and output AC supply, alert on anomalies and power ## You Will Need - * [Blues Starter Kit](https://shop.blues.io/collections/blues-starter-kits), that contains amongst other items - * [Notecarrier F](https://shop.blues.io/products/notecarrier-f) - * [Swan](https://shop.blues.io/collections/swan) - * [Notecard](https://shop.blues.io/collections/notecard) - * [Molex Cellular Antenna](https://shop.blues.io/collections/accessories/products/flexible-cellular-or-wi-fi-antenna) - * [LiPo battery](https://shop.blues.io/collections/accessories/products/5-000-mah-lipo-battery) + * [Blues Starter Kit](https://shop.blues.com/collections/blues-starter-kits?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link), that contains amongst other items + * [Notecarrier F](https://shop.blues.com/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Swan](https://shop.blues.com/collections/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Molex Cellular Antenna](https://shop.blues.com/collections/accessories/products/flexible-cellular-or-wi-fi-antenna?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [LiPo battery](https://shop.blues.com/collections/accessories/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * 2 x [Dr. Wattson Energy Monitoring Board](https://www.upbeatlabs.com/wattson/) * 2 x [ProtoStax Enclosure for Dr. Wattson](https://www.protostax.com/products/) or similar enclosure * 2 x [female-to-JST qwiic cable assembly](https://www.adafruit.com/product/4397) diff --git a/12-remote-power-control/README.md b/12-remote-power-control/README.md index 4c40673e..c35a25fc 100644 --- a/12-remote-power-control/README.md +++ b/12-remote-power-control/README.md @@ -10,12 +10,12 @@ The solution comprises hardware, firmware, Notehub environment variables and jso ## You Will Need - * [Blues Starter Kit](https://shop.blues.io/collections/blues-starter-kits), that contains amongst other items - * [Notecarrier F](https://shop.blues.io/products/notecarrier-f) - * [Swan](https://shop.blues.io/collections/swan) - * [Notecard](https://shop.blues.io/collections/notecard) - * [Molex Cellular Antenna](https://shop.blues.io/collections/accessories/products/flexible-cellular-or-wi-fi-antenna) - * [LiPo battery](https://shop.blues.io/collections/accessories/products/5-000-mah-lipo-battery) + * [Blues Starter Kit](https://shop.blues.com/collections/blues-starter-kits?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link), that contains amongst other items + * [Notecarrier F](https://shop.blues.com/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Swan](https://shop.blues.com/collections/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Molex Cellular Antenna](https://shop.blues.com/collections/accessories/products/flexible-cellular-or-wi-fi-antenna?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [LiPo battery](https://shop.blues.com/collections/accessories/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [Digital Loggers IoT Relay](https://www.digital-loggers.com/iot2.html) or similar. * 2 x [Dr. Wattson Energy Monitoring Board](https://www.upbeatlabs.com/wattson/) * 2 x [ProtoStax Enclosure for Dr. Wattson](https://www.protostax.com/products/) or similar enclosure diff --git a/13-tool-usage-cycle-tracking/README.md b/13-tool-usage-cycle-tracking/README.md index 0ac8de21..41b6d355 100644 --- a/13-tool-usage-cycle-tracking/README.md +++ b/13-tool-usage-cycle-tracking/README.md @@ -10,11 +10,11 @@ The solution comprises hardware, firmware, Notehub environment variables and jso ## You Will Need - * [Blues Starter Kit](https://shop.blues.io/collections/blues-starter-kits), that contains amongst other items - * [Notecarrier F](https://shop.blues.io/products/notecarrier-f) - * [Swan](https://shop.blues.io/collections/swan) - * [Notecard](https://shop.blues.io/collections/notecard) - * [Molex Cellular Antenna](https://shop.blues.io/collections/accessories/products/flexible-cellular-or-wi-fi-antenna) + * [Blues Starter Kit](https://shop.blues.com/collections/blues-starter-kits?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link), that contains amongst other items + * [Notecarrier F](https://shop.blues.com/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Swan](https://shop.blues.com/collections/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Molex Cellular Antenna](https://shop.blues.com/collections/accessories/products/flexible-cellular-or-wi-fi-antenna?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [Dr. Wattson Energy Monitoring Board](https://www.upbeatlabs.com/wattson/) * [ProtoStax Enclosure for Dr. Wattson](https://www.protostax.com/products/) or similar enclosure * [female-to-JST qwiic cable assembly](https://www.adafruit.com/product/4397) diff --git a/14-cargo-tracker/README.md b/14-cargo-tracker/README.md index 76ba54e5..a2f5f942 100644 --- a/14-cargo-tracker/README.md +++ b/14-cargo-tracker/README.md @@ -5,9 +5,9 @@ Monitor an asset's location via GPS and detect when it enters or leaves a geofen ## You Will Need * USB A to micro USB cable -* [LiPo battery with JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) -* [Notecarrier-A](https://shop.blues.io/products/carr-al) -* [Notecard](https://blues.io/products/notecard/) +* [LiPo battery with JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier A](https://shop.blues.com/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://blues.com/products/notecard/) ## Notehub Setup diff --git a/15-greenhouse-monitor/README.md b/15-greenhouse-monitor/README.md index e4365ce0..83121360 100644 --- a/15-greenhouse-monitor/README.md +++ b/15-greenhouse-monitor/README.md @@ -8,11 +8,11 @@ when any of these fall outside specified ranges. This app provides a simple to construct greenhouse monitoring device that can be deployed inside a greenhouse. The app monitors soil moisture and soil temperature as well as ambient light and ambient temperature. Using off-the-shelf hardware and modular components, you can use this solution to add monitoring to an existing greenhouse. ## You Will Need - * A [Blues Starter Kit](https://shop.blues.io/collections/blues-starter-kits), that contains amongst other things - * [Notecarrier F](https://shop.blues.io/products/notecarrier-f) - * [Swan](https://shop.blues.io/collections/swan) - * [Notecard](https://shop.blues.io/collections/notecard) - * [Molex Cellular Antenna](https://shop.blues.io/collections/accessories/products/flexible-cellular-or-wi-fi-antenna) + * A [Blues Starter Kit](https://shop.blues.com/collections/blues-starter-kits?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link), that contains amongst other things + * [Notecarrier F](https://shop.blues.com/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Swan](https://shop.blues.com/collections/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) + * [Molex Cellular Antenna](https://shop.blues.com/collections/accessories/products/flexible-cellular-or-wi-fi-antenna?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [Adafruit BME280](https://www.adafruit.com/product/2652) * [Photo transistor](https://www.adafruit.com/product/2831) * [Adafruit STEMMA Soil Sensor](https://www.adafruit.com/product/4026) diff --git a/16-power-outage-monitor/README.md b/16-power-outage-monitor/README.md index 42e202fe..acde630f 100644 --- a/16-power-outage-monitor/README.md +++ b/16-power-outage-monitor/README.md @@ -9,8 +9,8 @@ Use Notecard with a mains-powered USB power brick and LiPo battery to build a gl * LiPo battery with JST cable * AC to USB Adapter (power brick) * USB A to Micro USB cable -* [Notecarrier-A](https://shop.blues.io/collections/notecarrier/products/carr-al) or [Notecarrier-B](https://shop.blues.io/collections/notecarrier/products/carr-b) -* Cellular [Notecard](https://blues.io/products/notecard/) +* [Notecarrier A](https://shop.blues.com/collections/notecarrier/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) or [Notecarrier B](https://shop.blues.com/collections/notecarrier/products/carr-b?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* Cellular [Notecard](https://blues.com/products/notecard/) ## Hardware Setup @@ -162,4 +162,4 @@ Power restored (LiPo battery discharged) to device Refrigerator. We’d love to hear about you and your project on the [Blues Community Forum]. -[blues community forum]: https://discuss.blues.com/ \ No newline at end of file +[blues community forum]: https://discuss.blues.com/ diff --git a/17-refrigerator-monitor/README.md b/17-refrigerator-monitor/README.md index 1dedaca4..7953a7a5 100644 --- a/17-refrigerator-monitor/README.md +++ b/17-refrigerator-monitor/README.md @@ -6,9 +6,9 @@ Monitor refrigerator temperature, humidity, and power using a Notecard and a BME * AC to USB adapter (power brick) * USB A to micro USB cable -* [LiPo battery with JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) -* [Notecarrier-A](https://shop.blues.io/collections/notecarrier/products/carr-al) -* [Notecard](https://blues.io/products/notecard/) +* [LiPo battery with JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier A](https://shop.blues.com/collections/notecarrier/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://blues.com/products/notecard/) * [SparkFun Atmospheric Sensor Breakout - BME280 (Qwiic)](https://www.sparkfun.com/products/15440) * [Qwiic Cable](https://www.sparkfun.com/products/14426) diff --git a/18-temperature-and-humidity-monitor/README.md b/18-temperature-and-humidity-monitor/README.md index e0adff06..36f216f3 100644 --- a/18-temperature-and-humidity-monitor/README.md +++ b/18-temperature-and-humidity-monitor/README.md @@ -8,10 +8,10 @@ Monitor temperature and humidity and send alerts using a Notecard and a BME280 s * AC to USB adapter (power brick) * USB A to micro USB cable -* [LiPo battery with JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) -* [Notecarrier-F](https://shop.blues.io/collections/notecarrier/products/notecarrier-f) -* [Notecard](https://blues.io/products/notecard/) -* [Swan MCU](https://blues.io/products/swan/) +* [LiPo battery with JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier F](https://shop.blues.com/collections/notecarrier/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://blues.com/products/notecard/) +* [Swan MCU](https://blues.com/products/swan/) * [SparkFun Atmospheric Sensor Breakout - BME280 (Qwiic)](https://www.sparkfun.com/products/15440) * [Qwiic Cable](https://www.sparkfun.com/products/14426) diff --git a/19-sign-and-door-tilt/README.md b/19-sign-and-door-tilt/README.md index 266689ee..983885b4 100644 --- a/19-sign-and-door-tilt/README.md +++ b/19-sign-and-door-tilt/README.md @@ -5,9 +5,9 @@ Detect when a sign is knocked over or a door is opened/closed. ## You Will Need * USB A to micro USB cable -* [LiPo battery with JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) -* [Notecarrier-A](https://shop.blues.io/products/carr-al) -* [Notecard](https://blues.io/products/notecard/) +* [LiPo battery with JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier A](https://shop.blues.com/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://blues.com/products/notecard/) ## Notehub Setup diff --git a/20-motor-monitor-and-vibration/README.md b/20-motor-monitor-and-vibration/README.md index 9d448872..aa114b07 100644 --- a/20-motor-monitor-and-vibration/README.md +++ b/20-motor-monitor-and-vibration/README.md @@ -11,9 +11,9 @@ send alerts when the vibration is not within the expected range for the motor's ## Hardware you will need * AC to USB adapter (power brick) with a compatible micro USB cable -* (optional - for power outage events) [LiPo battery with JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) -* [Notecarrier-B](https://shop.blues.io/products/carr-b) -* [Notecard](https://blues.io/products/notecard/) +* (optional - for power outage events) [LiPo battery with JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier B](https://shop.blues.com/products/carr-b?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://blues.com/products/notecard/) * A switched motor that has a 3v3 input or output that controls or indicates activity. (See the next section for details.) * A pair of jumper cables @@ -179,4 +179,4 @@ Initially, start with these all configured to the value 1, which will generate a ## Blues Community -We’d love to hear about you and your project on the [Blues Community Forum](https://discuss.blues.com/)! \ No newline at end of file +We’d love to hear about you and your project on the [Blues Community Forum](https://discuss.blues.com/)! diff --git a/21-sump-level-monitor/README.md b/21-sump-level-monitor/README.md index 3c0c4b13..2e64db7a 100644 --- a/21-sump-level-monitor/README.md +++ b/21-sump-level-monitor/README.md @@ -5,8 +5,8 @@ Monitor water level changes in a sump using a Notecard and a float switch. ## You Will Need * USB A to micro USB cable -* [Notecarrier-A](https://shop.blues.io/products/carr-al) or [Notecarrier-B](https://shop.blues.io/products/carr-b) (for the Notecarrier-B you'll need a separate antenna, which comes with the Notecarrier-B in our shop) -* [Notecard](https://blues.io/products/notecard/) +* [Notecarrier A](https://shop.blues.com/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) or [Notecarrier B](https://shop.blues.com/products/carr-b?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) (for the Notecarrier-B you'll need a separate antenna, which comes with the Notecarrier-B in our shop) +* [Notecard](https://blues.com/products/notecard/) * [Sump Alarm Three Wire Float Switch](https://www.sumpalarm.com/products/float-switch-for-use-septic-system-sump-pump-water-tank-see-all-five-cable-length-options) * Soldering iron and solder flux * Strip of male header pins @@ -96,5 +96,5 @@ The switch was opened, and AUX1 is now reading high from its pull-up. ## Going Further - In a real sump, the float switch will change orientation and close/open with rising and falling water level. When the water rises to a certain level (the exact level is dependent on how much slack you've given the float), you'll get the first kind of note, indicating low voltage on AUX1. When the water falls back to a certain level, you'll get the second kind of note, indicating high voltage on AUX1. You can then act on this signal as appropriate for your use case. -- In the real world, you'd want your alert system to be resilient to power outages, so you'll want to hook up a [LiPo battery with a JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) to the JST port labeled LIPO on the Notecarrier. +- In the real world, you'd want your alert system to be resilient to power outages, so you'll want to hook up a [LiPo battery with a JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) to the JST port labeled LIPO on the Notecarrier. - If you want to wire up more float switches to the same Notecard, you can easily do so by using the additional AUX pins. This could be useful in a particularly deep sump/vessel and/or when you want more granularity in terms of knowing the current fluid level. diff --git a/22-roadway-impact-detection/README.md b/22-roadway-impact-detection/README.md index 8b751ecf..6f8d2038 100644 --- a/22-roadway-impact-detection/README.md +++ b/22-roadway-impact-detection/README.md @@ -5,9 +5,9 @@ Detect when a vehicle or other object collides with another object on a roadway. ## You Will Need * USB A to micro USB cable -* [LiPo battery with JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) -* [Notecarrier-A](https://shop.blues.io/products/carr-al) -* [Notecard](https://blues.io/products/notecard/) +* [LiPo battery with JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier A](https://shop.blues.com/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://blues.com/products/notecard/) ## Notehub Setup diff --git a/23-freight-car-door-motion-and-location/README.md b/23-freight-car-door-motion-and-location/README.md index b9a3320e..e97043f6 100644 --- a/23-freight-car-door-motion-and-location/README.md +++ b/23-freight-car-door-motion-and-location/README.md @@ -5,9 +5,9 @@ Track the location of a Freight Car and determine the number of times the door w ## You will need * USB A to micro USB cable -* [LiPo battery with JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) -* [Notecarrier-A](https://shop.blues.io/products/carr-al) or [Notecarrier-B](https://shop.blues.io/products/carr-b) -* [Notecard WBNA](https://shop.blues.io/collections/notecard/products/note-wbna-500) +* [LiPo battery with JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier A](https://shop.blues.com/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) or [Notecarrier B](https://shop.blues.com/products/carr-b?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * To sense the door opening, either * [Hall Effect Sensor](https://www.amazon.com/HiLetgo-NJK-5002C-Proximity-3-Wires-Normally/dp/B01MZYYCLH/) * or @@ -148,4 +148,4 @@ You can use the config.json file in this directory along with the [Notecard CLI] notecard -setup config.json ``` -Before doing this, you will need to edit config.json and replace `com.your-company:your-product-name` with your ProductUID from [Notehub Setup](#notehub-setup). \ No newline at end of file +Before doing this, you will need to edit config.json and replace `com.your-company:your-product-name` with your ProductUID from [Notehub Setup](#notehub-setup). diff --git a/24-animal-tracker/README.md b/24-animal-tracker/README.md index ee3623c6..fb352b00 100644 --- a/24-animal-tracker/README.md +++ b/24-animal-tracker/README.md @@ -5,9 +5,9 @@ Monitor an animal's location via GPS and detect when it enters or leaves a geofe ## You Will Need * USB A to micro USB cable -* [LiPo battery with JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) -* [Notecarrier-A](https://shop.blues.io/products/carr-al) -* [Notecard](https://blues.io/products/notecard/) +* [LiPo battery with JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier A](https://shop.blues.com/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://blues.com/products/notecard/) ## Notehub Setup diff --git a/27-cellular-connected-electronic-kiosk/README.md b/27-cellular-connected-electronic-kiosk/README.md index 5b067ad0..12d2dba8 100644 --- a/27-cellular-connected-electronic-kiosk/README.md +++ b/27-cellular-connected-electronic-kiosk/README.md @@ -20,8 +20,8 @@ The following hardware is required to run the Cellular-Connected Electronic Kios - [Raspberry Pi 4B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) - [CanaKit 3.5A Raspberry Pi 4 Power Supply (USB-C)](https://www.amazon.com/CanaKit-Raspberry-Power-Supply-USB-C/dp/B07TYQRXTK/) - microSD Card (8GB minimum) and a MicroSD to SD Memory Card Adapter (your development PC must have an SD card reader slot) -- [Notecard](https://shop.blues.io/collections/notecard/products/note-wbna-500) -- [Notecarrier Pi Hat](https://shop.blues.io/products/carr-pi) +- [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +- [Notecarrier Pi Hat](https://shop.blues.com/products/carr-pi?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) - Micro USB cable - [7" Touchscreen Display for Raspberry Pi](https://www.adafruit.com/product/2718) - [Wireless Keyboard and Mouse Combo](https://www.adafruit.com/product/1738) diff --git a/28-door-state-monitor/README.md b/28-door-state-monitor/README.md index 3ad2730a..d8db00a1 100644 --- a/28-door-state-monitor/README.md +++ b/28-door-state-monitor/README.md @@ -4,7 +4,7 @@ Receive notifications when a door is opened or closed. ## You Will Need -* [Blues Starter Kit for LoRaWAN](https://shop.blues.com/products/blues-starter-kit-lorawan) +* [Blues Starter Kit for LoRaWAN](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * Raspberry Pi Pico * 2 USB A to micro USB cables * [Magnetic Door Switch Set](https://www.sparkfun.com/products/13247) @@ -15,7 +15,7 @@ Sign up for a free account on [notehub.io](https://notehub.io) and [create a new ## LoRa Gateway Setup -Before you can use the Notecard LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) +Before you can use the Notecard for LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) ## Pico Setup @@ -93,4 +93,4 @@ We’d love to hear about you and your project on the [Blues Community Forum](ht ## Additional Resources -* [Notecard Lora Datasheet](https://dev.blues.io/datasheets/notecard-datasheet/note-lora-v2-1/) +* [Notecard for Lora Datasheet](https://dev.blues.io/datasheets/notecard-datasheet/note-lora-v2-1/) diff --git a/29-restroom-servicing-monitor/README.md b/29-restroom-servicing-monitor/README.md index 423364d2..5065bbd2 100644 --- a/29-restroom-servicing-monitor/README.md +++ b/29-restroom-servicing-monitor/README.md @@ -4,7 +4,7 @@ Receive updates on restroom cleanliness so that it can be serviced when needed. ## You Will Need -* [Blues Starter Kit for LoRaWAN](https://shop.blues.com/products/blues-starter-kit-lorawan) +* [Blues Starter Kit for LoRaWAN](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * Raspberry Pi Pico * 2 USB A to micro USB cables * Breadboard @@ -17,7 +17,7 @@ Sign up for a free account on [notehub.io](https://notehub.io) and [create a new ## LoRa Gateway Setup -Before you can use the Notecard LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) +Before you can use the Notecard for LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) ## Hardware diff --git a/30-indoor-air-quality-and-gas-leak/README.md b/30-indoor-air-quality-and-gas-leak/README.md index 2b3f4877..93131101 100644 --- a/30-indoor-air-quality-and-gas-leak/README.md +++ b/30-indoor-air-quality-and-gas-leak/README.md @@ -6,10 +6,10 @@ Monitor air quality, including Air Quality Index, CO2 and VOC concentration, and ## You Will Need -* [Notecard Lora](https://shop.blues.com/collections/notecard/products/notecard-lora) -* [LoRaWAN Gateway](https://shop.blues.com/collections/accessories/products/lorawan-gateway) -* [Notecarrier F](https://shop.blues.com/collections/notecarrier/products/notecarrier-f) -* [Swan](https://shop.blues.com/collections/swan/products/swan) +* [Notecard for Lora](https://shop.blues.com/collections/notecard/products/notecard-lora?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [LoRaWAN Gateway](https://shop.blues.com/collections/accessories/products/lorawan-gateway?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier F](https://shop.blues.com/collections/notecarrier/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Swan](https://shop.blues.com/collections/swan/products/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * 2 USB A to micro USB cables * [Sparkfun Indoor Air Quality Sensor - ENS160](https://www.sparkfun.com/products/20844) * [Qwiic cable](https://www.sparkfun.com/products/14427) @@ -20,19 +20,19 @@ Sign up for a free account on [notehub.io](https://notehub.io) and [create a new ## LoRa Gateway Setup -Before you can use the Notecard LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) +Before you can use the Notecard for LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) ## Swan Setup First connect your Blues Swan and Notecard to your Notecarrier-F. -1. Follow the steps in the [Notecard Quickstart](https://dev.blues.io/quickstart/notecard-quickstart/notecard-and-notecarrier-f/#connect-your-notecard-and-notecarrier) to connect your Notecard LoRa to your Notecarrier-F. Your antenna will only have one cable, and the Notecard LoRa only has one connection. +1. Follow the steps in the [Notecard Quickstart](https://dev.blues.io/quickstart/notecard-quickstart/notecard-and-notecarrier-f/#connect-your-notecard-and-notecarrier) to connect your Notecard for LoRa to your Notecarrier-F. Your antenna will only have one cable, and the Notecard for LoRa only has one connection. 2. Plug your Swan into the Feather headers on the Notecarrier F. 3. Attach the Swan to your computer with a Micro USB to USB-A cable, using the **Micro USB port on the Swan**. -![Notecard LoRa in Notecarrier F with antenna](images/notecarrier-notecard.jpg) +![Notecard for LoRa in Notecarrier F with antenna](images/notecarrier-notecard.jpg) ### Air Quality Sensor Connection diff --git a/30-indoor-air-quality-and-gas-leak/firmware/README.md b/30-indoor-air-quality-and-gas-leak/firmware/README.md index c09ba6b8..1fc49b64 100644 --- a/30-indoor-air-quality-and-gas-leak/firmware/README.md +++ b/30-indoor-air-quality-and-gas-leak/firmware/README.md @@ -35,7 +35,7 @@ Complete the following steps to upload firmware in PlatformIO. 1. Connect your Swan to your computer using [these steps](https://dev.blues.io/feather-mcus/swan/using-platformio-with-swan). > **NOTE**: The project’s default configuration assumes you’re using an -[STLINK-V3MINI programmer and debugger](https://shop.blues.io/products/stlink-v3mini). +[STLINK-V3MINI programmer and debugger](https://shop.blues.com/products/stlink-v3mini?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). If you’re not, make sure to open your `platformio.ini` file and change the `upload_protocol` to `dfu`. diff --git a/31-temperature-and-smoke-detector/README.md b/31-temperature-and-smoke-detector/README.md index 486abc48..2a0e4155 100644 --- a/31-temperature-and-smoke-detector/README.md +++ b/31-temperature-and-smoke-detector/README.md @@ -6,10 +6,10 @@ Temperature monitoring and smoke detection across a number of rooms at a facilit ## You Will Need -* [Notecard Lora](https://shop.blues.com/collections/notecard/products/notecard-lora) -* [LoRaWAN Gateway](https://shop.blues.com/collections/accessories/products/lorawan-gateway) -* [Notecarrier F](https://shop.blues.com/collections/notecarrier/products/notecarrier-f) -* [Swan](https://shop.blues.com/collections/swan/products/swan) +* [Notecard for Lora](https://shop.blues.com/collections/notecard/products/notecard-lora?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [LoRaWAN Gateway](https://shop.blues.com/collections/accessories/products/lorawan-gateway?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecarrier F](https://shop.blues.com/collections/notecarrier/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Swan](https://shop.blues.com/collections/swan/products/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * 2 USB A to micro USB cables * [MQ2 Gas and Smoke Sensor](https://www.amazon.com/Reland-Sun-MQ-2-Sensor-Module/dp/B09NN39G8X) * [3.3-to-5v voltage converter](https://www.amazon.com/Comidox-Module-Voltage-Converter-0-9-5V/dp/B07L76KLRY) @@ -26,19 +26,19 @@ Sign up for a free account on [notehub.io](https://notehub.io) and [create a new ## LoRa Gateway Setup -Before you can use the Notecard LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) +Before you can use the Notecard for LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) ## Swan Setup First connect your Blues Swan and Notecard to your Notecarrier F. -1. Follow the steps in the [Notecard Quickstart](https://dev.blues.io/quickstart/notecard-quickstart/notecard-and-notecarrier-f/#connect-your-notecard-and-notecarrier) to connect your Notecard LoRa to your Notecarrier F. Your antenna will only have one cable, and the Notecard LoRa only has one connection. +1. Follow the steps in the [Notecard Quickstart](https://dev.blues.io/quickstart/notecard-quickstart/notecard-and-notecarrier-f/#connect-your-notecard-and-notecarrier) to connect your Notecard for LoRa to your Notecarrier F. Your antenna will only have one cable, and the Notecard for LoRa only has one connection. 2. Plug your Swan into the Feather headers on the Notecarrier F. 3. Attach the Swan to your computer with a Micro USB to USB-A cable, using the **Micro USB port on the Swan**. -![Notecard LoRa in Notecarrier F with antenna](images/notecarrier-notecard.jpg) +![Notecard for LoRa in Notecarrier F with antenna](images/notecarrier-notecard.jpg) ### MQ2 Sensor Connection diff --git a/31-temperature-and-smoke-detector/firmware/README.md b/31-temperature-and-smoke-detector/firmware/README.md index 6fc0cbec..9e5567cd 100644 --- a/31-temperature-and-smoke-detector/firmware/README.md +++ b/31-temperature-and-smoke-detector/firmware/README.md @@ -35,7 +35,7 @@ Complete the following steps to upload firmware in PlatformIO. 1. Connect your Swan to your computer using [these steps](https://dev.blues.io/feather-mcus/swan/using-platformio-with-swan). > **NOTE**: The project’s default configuration assumes you’re using an -[STLINK-V3MINI programmer and debugger](https://shop.blues.io/products/stlink-v3mini). +[STLINK-V3MINI programmer and debugger](https://shop.blues.com/products/stlink-v3mini?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). If you’re not, make sure to open your `platformio.ini` file and change the `upload_protocol` to `dfu`. diff --git a/32-fall-detector-and-panic-button/README.md b/32-fall-detector-and-panic-button/README.md index 844cc87f..7644d225 100644 --- a/32-fall-detector-and-panic-button/README.md +++ b/32-fall-detector-and-panic-button/README.md @@ -4,13 +4,13 @@ Receive a notification when a fall is detected and provide a panic button to ale ## You Will Need -* [Notecarrier-F](https://shop.blues.com/collections/notecarrier/products/notecarrier-f) -* [Notecard for LoRa](https://shop.blues.com/products/notecard-lora) +* [Notecarrier F](https://shop.blues.com/collections/notecarrier/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard for LoRa](https://shop.blues.com/products/notecard-lora?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [1 push button](https://www.sparkfun.com/products/14460) * [SparkFun Micro Triple Axis Accelerometer Breakout - BMA400 (Qwiic)](https://www.sparkfun.com/products/21207) * *or* [SparkFun Triple Axis Accelerometer Breakout - BMA400 (Qwiic)](https://www.sparkfun.com/products/21208) * [Flexible Qwiic Cable - 50mm](https://www.sparkfun.com/products/17260) -* [LiPo Battery](https://shop.blues.com/collections/accessories/products/5-000-mah-lipo-battery) +* [LiPo Battery](https://shop.blues.com/collections/accessories/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * 2 USB A to micro USB cables * Breadboard * Jumper wires @@ -20,19 +20,19 @@ Receive a notification when a fall is detected and provide a panic button to ale ## LoRa Gateway Setup -Before you can use the Notecard LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) +Before you can use the Notecard for LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) ## Swan Setup First connect your Blues Swan and Notecard to your Notecarrier F. -1. Follow the steps in the [Notecard Quickstart](https://dev.blues.io/quickstart/notecard-quickstart/notecard-and-notecarrier-f/#connect-your-notecard-and-notecarrier) to connect your Notecard LoRa to your Notecarrier F. Your antenna will only have one cable, and the Notecard LoRa only has one connection. +1. Follow the steps in the [Notecard Quickstart](https://dev.blues.io/quickstart/notecard-quickstart/notecard-and-notecarrier-f/#connect-your-notecard-and-notecarrier) to connect your Notecard for LoRa to your Notecarrier F. Your antenna will only have one cable, and the Notecard for LoRa only has one connection. 2. Plug your Swan into the Feather headers on the Notecarrier F. 3. Attach the Swan to your computer with a Micro USB to USB-A cable, using the **Micro USB port on the Swan**. -![Notecard LoRa in Notecarrier F with antenna](images/notecarrier-notecard.jpg) +![Notecard for LoRa in Notecarrier F with antenna](images/notecarrier-notecard.jpg) ## Hardware Setup diff --git a/33-room-occupancy-monitor/README.md b/33-room-occupancy-monitor/README.md index 8ede73ce..a19736de 100644 --- a/33-room-occupancy-monitor/README.md +++ b/33-room-occupancy-monitor/README.md @@ -4,7 +4,7 @@ Receive notifications when motion is detected in a room and when the room's door ## You Will Need -* [Blues Starter Kit for LoRaWAN](https://shop.blues.com/products/blues-starter-kit-lorawan) +* [Blues Starter Kit for LoRaWAN](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * Raspberry Pi Pico * USB A to micro USB cable * [Magnetic Door Switch Set](https://www.sparkfun.com/products/13247) @@ -17,7 +17,7 @@ Sign up for a free account on [notehub.io](https://notehub.io) and [create a new ## LoRa Gateway Setup -Before you can use the Notecard LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) +Before you can use the Notecard for LoRa you need to have a LoRaWAN gateway that is provisioned to The Things Network. To make this easy you can use the [Blues Indoor LoRaWAN Gateway](https://shop.blues.com/products/blues-starter-kit-lorawan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link). To get this set up follow the [setup instructions](https://dev.blues.io/lora/connecting-to-a-lorawan-gateway/) ## Pico Setup diff --git a/34-cellular-modbus-client/README.md b/34-cellular-modbus-client/README.md index 5e149d2f..4270f8ce 100644 --- a/34-cellular-modbus-client/README.md +++ b/34-cellular-modbus-client/README.md @@ -5,13 +5,13 @@ Send requests and receive responses from Modbus servers via cellular. ## You Will Need * [Visual Studio Code (VS Code)](https://code.visualstudio.com/) with the [PlatformIO extension](https://platformio.org/) -* [Notecarrier F](https://blues.io/products/notecarrier/notecarrier-f/) -* [Notecard](https://blues.io/products/notecard/) -* [Swan](https://blues.io/products/swan/) +* [Notecarrier F](https://blues.com/products/notecarrier/notecarrier-f/) +* [Notecard](https://blues.com/products/notecard/) +* [Swan](https://blues.com/products/swan/) * [SparkFun Transceiver Breakout - RS-485](https://www.sparkfun.com/products/10124) * [SparkFun USB to RS-485 Converter](https://www.sparkfun.com/products/9822) * [2 Screw Terminals 3.5mm Pitch (3-Pin)](https://www.sparkfun.com/products/8235) -* [STLINK-V3MINI](https://shop.blues.io/collections/accessories/products/stlink-v3mini) +* [STLINK-V3MINI](https://shop.blues.com/collections/accessories/products/stlink-v3mini?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * 2 micro USB cables * [1 USB mini-B cable](https://www.sparkfun.com/products/13243) * Male-to-male jumper wires diff --git a/35-CAN-vehicle-monitor/README.md b/35-CAN-vehicle-monitor/README.md index d37f2805..4abf6a3f 100644 --- a/35-CAN-vehicle-monitor/README.md +++ b/35-CAN-vehicle-monitor/README.md @@ -10,8 +10,8 @@ Monitor a CAN bus for messages with particular IDs and upload those messages to * USB C cable * [USB to CAN Converter Cable](https://www.amazon.com/gp/product/B09K3LL93Q) * [Adafruit Feather M4 CAN Express with ATSAME51](https://www.adafruit.com/product/4759) -* [Notecarrier-F](https://shop.blues.io/products/notecarrier-f) -* [Notecard](https://blues.io/products/notecard/) +* [Notecarrier F](https://shop.blues.com/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +* [Notecard](https://blues.com/products/notecard/) * Antenna (comes with the Notecard) * 2 male-to-male jumper wires * Soldering iron diff --git a/36-vending-machine-monitor/README.md b/36-vending-machine-monitor/README.md index e5df01e4..a202cf8e 100644 --- a/36-vending-machine-monitor/README.md +++ b/36-vending-machine-monitor/README.md @@ -18,9 +18,9 @@ By using a distance sensor placed at the top of each column of soda cans, the So ### Hardware -- [Notecard](https://shop.blues.io/collections/notecard/products/note-wbna-500) -- [Notecarrier F](https://blues.io/products/notecarrier/notecarrier-f/) -- [Swan](https://shop.blues.io/collections/swan/products/swan) +- [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +- [Notecarrier F](https://blues.com/products/notecarrier/notecarrier-f/) +- [Swan](https://shop.blues.com/collections/swan/products/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) - USB-A to Micro-USB cable For each dispensing column: diff --git a/37-heat-index-monitor/README.md b/37-heat-index-monitor/README.md index d489b1e5..e2e734b9 100644 --- a/37-heat-index-monitor/README.md +++ b/37-heat-index-monitor/README.md @@ -9,11 +9,11 @@ Monitor temperature, humidity, and heat index and send alerts using a solar-powe - [Adafruit BME280 board with Qwiic cable](https://www.adafruit.com/product/2652) - [Lithium Ion Battery - 3.7V 2000mAh](https://www.adafruit.com/product/2011) - [Seeed Studio 3W Solar Panel with JST Connector](https://www.seeedstudio.com/3W-Solar-Panel-138X160.html) -- [Notecarrier F](https://shop.blues.io/products/notecarrier-f) -- [Notecard](https://shop.blues.io/products/note-wbna-500) -- [Swan](https://shop.blues.io/collections/swan) +- [Notecarrier F](https://shop.blues.com/products/notecarrier-f?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +- [Notecard](https://shop.blues.com/products/note-wbna-500?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +- [Swan](https://shop.blues.com/collections/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) - 2 micro USB cables -- [STLINK-V3MINI](https://shop.blues.io/collections/accessories/products/stlink-v3mini) +- [STLINK-V3MINI](https://shop.blues.com/collections/accessories/products/stlink-v3mini?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) - [Housing to shield BME280](https://www.amazon.com/Crosse-Technology-925-1418-Sensor-Protection/dp/B00VSXENM4)* \* This housing isn't strictly required, but [the BME280 will give erroneous measurements if it isn't shielded from UV](https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/BME280-sensibility-to-UV-light/td-p/17079). You'll also want something to shield the hardware from the elements if you plan to have this project deployed indefinitely. (see [Stevenson screen](https://en.wikipedia.org/wiki/Stevenson_screen)) diff --git a/38-audio-classifier/README.md b/38-audio-classifier/README.md index 0895d40c..fe9b2eaf 100644 --- a/38-audio-classifier/README.md +++ b/38-audio-classifier/README.md @@ -12,9 +12,9 @@ You'll use [Edge Impulse](https://www.edgeimpulse.com/), a free edge AI platform ### Hardware -- [Notecard](https://shop.blues.io/collections/notecard/products/note-wbna-500) -- [Notecarrier F](https://blues.io/products/notecarrier/notecarrier-f/) -- [Swan](https://shop.blues.io/collections/swan/products/swan) +- [Notecard](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) +- [Notecarrier F](https://blues.com/products/notecarrier/notecarrier-f/) +- [Swan](https://shop.blues.com/collections/swan/products/swan?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) - [Adafruit PDM MEMS Microphone Breakout](https://www.adafruit.com/product/3492) - Soldering iron and flux - Male-to-female jumper wires diff --git a/40-car-detector/README.md b/40-car-detector/README.md index 4a7b3cfe..2415e9c3 100644 --- a/40-car-detector/README.md +++ b/40-car-detector/README.md @@ -4,12 +4,12 @@ Detect passing cars with a camera and publish the timestamps for these events to ## Overview -This application continuously grabs images from an [OpenMV](https://openmv.io/) camera board running [MicroPython](https://micropython.org/) and runs them through an object detection model built using [Edge Impulse](https://edgeimpulse.com/) to test for the presence of a car. The coming and going of a car counts as 1 "event". The start and end times for each event are captured and periodically synced to [Notehub](https://www.notehub.io/) via a [Notecard](https://blues.io/products/notecard/). +This application continuously grabs images from an [OpenMV](https://openmv.io/) camera board running [MicroPython](https://micropython.org/) and runs them through an object detection model built using [Edge Impulse](https://edgeimpulse.com/) to test for the presence of a car. The coming and going of a car counts as 1 "event". The start and end times for each event are captured and periodically synced to [Notehub](https://www.notehub.io/) via a [Notecard](https://blues.com/products/notecard/). ## You Will Need -* [Notecard](https://blues.io/products/notecard/) -* [Notecarrier A](https://blues.io/products/notecarrier/notecarrier-a/) +* [Notecard](https://blues.com/products/notecard/) +* [Notecarrier A](https://blues.com/products/notecarrier/notecarrier-a/) * [OpenMV Cam H7](https://openmv.io/products/openmv-cam-h7) * [Super Telephoto Lens](https://openmv.io/collections/lenses/products/super-telephoto-lens)* * 2 micro USB cables diff --git a/41-cold-chain-monitor/README.md b/41-cold-chain-monitor/README.md index 7922b481..eb725d10 100644 --- a/41-cold-chain-monitor/README.md +++ b/41-cold-chain-monitor/README.md @@ -35,12 +35,12 @@ Prerequisites - USB type A-to-micro USB cable - [2000 mAh Li-Ion battery with JST cable](https://www.adafruit.com/product/2011) -- [Notecarrier-B](https://shop.blues.io/collections/notecarrier/products/notecarrier-b) +- [Notecarrier B](https://shop.blues.com/collections/notecarrier/products/notecarrier-b?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) - Molex Antenna 213353 (included with Notecarrier-B purchase) -- [LTE Cat-1 Notecard (North America, EMEA)](https://shop.blues.io/collections/notecard) +- [LTE Cat-1 Notecard (North America, EMEA)](https://shop.blues.com/collections/notecard?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) - [Adafruit Huzzah32 - ESP32 Feather Board (loose headers)](https://www.adafruit.com/product/3405) - [HiLetgo 2pcs LM75 LM75A Temperature Sensor Module](https://www.amazon.com/gp/product/B082KLD7XT/) -- [Molex Antenna 209142](https://shop.blues.io/collections/accessories/products/flexible-cellular-or-wi-fi-antenna) +- [Molex Antenna 209142](https://shop.blues.com/collections/accessories/products/flexible-cellular-or-wi-fi-antenna?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) - [Qwiic Cable Breakout](https://www.sparkfun.com/products/14425) - [[OPTIONAL] Cirocomm 5cm Ceramic Active GPS Antenna 32db (High Gain)](https://www.amazon.com/gp/product/B078Y2WNY6/) - [[OPTIONAL] ESP-Prog](https://www.digikey.com/en/products/detail/espressif-systems/ESP-PROG/10259352) diff --git a/41-cold-chain-monitor/firmware/arduino/src/main.cpp b/41-cold-chain-monitor/firmware/arduino/src/main.cpp index 55bdbb8f..990fff27 100644 --- a/41-cold-chain-monitor/firmware/arduino/src/main.cpp +++ b/41-cold-chain-monitor/firmware/arduino/src/main.cpp @@ -411,9 +411,9 @@ void NoteUserAgentUpdate(J *ua) JAddStringToObject(ua, "app", "nf41"); } - /************************ +/************************ * Application Execution * -************************/ + ************************/ void setup() { @@ -440,7 +440,7 @@ void setup() // Initialize Notecard notecard.begin(); #ifdef ARDUINO_ARCH_ESP32 - // Initialize Auxiliary Wi-Fi + // Initialize Auxiliary WiFi aux_wifi.begin(); #endif @@ -478,7 +478,7 @@ void setup() // when storage threshold has been exceeded } - // Select location service (Wi-Fi or GPS) based upon alarm state + // Select location service (WiFi or GPS) based upon alarm state if (ACTIVE_ALARM) { // Halt periodic tracking when alarm is active @@ -492,7 +492,7 @@ void setup() if (int gps_error = acquireGPSLocation()) { logNoteF("ERROR: Failed to acquire GPS signal! <%d>", gps_error); - // Failed to acquire GPS try Wi-Fi instead + // Failed to acquire GPS try WiFi instead #ifdef ARDUINO_ARCH_ESP32 aux_wifi.updateTriangulationData(true, false); aux_wifi.logCachedSsids(); // Log SSIDs used in calculation @@ -502,10 +502,10 @@ void setup() else { #ifdef ARDUINO_ARCH_ESP32 - // Check if actively moving before updating Wi-Fi location + // Check if actively moving before updating WiFi location if (!inMotion()) { - aux_wifi.updateTriangulationData(true); // Update Current Location (via Wi-Fi) + aux_wifi.updateTriangulationData(true); // Update Current Location (via WiFi) aux_wifi.logCachedSsids(); // Log SSIDs used in calculation } #endif diff --git a/42-cellular-smoke-detector-retrofit/README.md b/42-cellular-smoke-detector-retrofit/README.md index 852d2efb..f8abc612 100644 --- a/42-cellular-smoke-detector-retrofit/README.md +++ b/42-cellular-smoke-detector-retrofit/README.md @@ -10,16 +10,16 @@ The smoke detectors installed in a home often come with [3 wires](https://home.h - White is neutral. - Red is an interconnect wire that essentially acts as a bus shared by all the smoke detectors in the home. -For this project, we're primarily interested in that interconnect wire. Typically, when one detector senses smoke and starts alarming, it will raise the voltage on this line to 9V DC. The other smoke detectors sense this voltage and begin sounding their alarms in response. This application adds an additional node on the interconnect bus that senses the change in voltage and uses a [Blues Notecard](https://blues.io/products/notecard/) to push a notification to [Notehub](https://notehub.io). That notification causes an SMS message to be sent to a phone number of your choosing. When the alarm stops and the voltage drops back to 0, another SMS is sent to indicate the alarm has stopped. +For this project, we're primarily interested in that interconnect wire. Typically, when one detector senses smoke and starts alarming, it will raise the voltage on this line to 9V DC. The other smoke detectors sense this voltage and begin sounding their alarms in response. This application adds an additional node on the interconnect bus that senses the change in voltage and uses a [Blues Notecard](https://blues.com/products/notecard/) to push a notification to [Notehub](https://notehub.io). That notification causes an SMS message to be sent to a phone number of your choosing. When the alarm stops and the voltage drops back to 0, another SMS is sent to indicate the alarm has stopped. Note that the instructions in this README require you to remove one of the smoke detectors in your home and install the hardware described here in its place. It's certainly possible to keep the smoke detector installed alongside the cellular monitoring system, but this is not covered in this document. ## You Will Need -* [Notecard](https://blues.io/products/notecard/) -* [Notecarrier-A](https://shop.blues.io/collections/notecarrier/products/carr-al) +* [Notecard](https://blues.com/products/notecard/) +* [Notecarrier A](https://shop.blues.com/collections/notecarrier/products/carr-al?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * USB A to micro USB cable -* [LiPo battery with JST cable](https://shop.blues.io/products/5-000-mah-lipo-battery) +* [LiPo battery with JST cable](https://shop.blues.com/products/5-000-mah-lipo-battery?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [PC817 optocoupler](https://www.amazon.com/dp/B01JG8EJVW?psc=1&ref=ppx_yo2ov_dt_b_product_details) * Non-contact voltage tester * Digital multimeter with hook or clip probes diff --git a/46-lightning-detector/README.md b/46-lightning-detector/README.md index 54f8750e..8fc765de 100644 --- a/46-lightning-detector/README.md +++ b/46-lightning-detector/README.md @@ -5,7 +5,7 @@ Detect lightning strikes up to 40 km away and send the detections to the cloud v ## You Will Need * [Visual Studio Code (VS Code)](https://code.visualstudio.com/) with the [PlatformIO extension](https://platformio.org/) -* [Blues Starter Kit for North America](https://shop.blues.io/products/blues-starter-kit-for-north-america)[^1] +* [Blues Starter Kit](https://shop.blues.com/collections/blues-starter-kits/products/blues-global-starter-kit?utm_source=dev-blues&utm_medium=web&utm_campaign=store-link) * [SparkFun Lightning Detector - AS3935](https://www.sparkfun.com/products/15441) * Row of 7 headers * Soldering iron @@ -135,7 +135,7 @@ Sending event note... [INFO] {"template":true} ``` -On Notehub, in your project's Events tab, you should see the Note come through sometime later.[^2] +On Notehub, in your project's Events tab, you should see the Note come through sometime later.[^1] ![](images/events.png) @@ -154,5 +154,4 @@ Because this was a disturber (type 2), no `distance_to_storm` or `energy` fields We’d love to hear about you and your project on the [Blues Community Forum](https://discuss.blues.com/)! -[^1]: [Blues Starter Kits for EMEA](https://shop.blues.io/products/blues-starter-kit-for-emea) are also available. -[^2]: Notes are synced from the Notecard to Notehub every 10 minutes. See the `OUTBOUND_MINS` macro in lightning_detector.ino if you want to change the number of minutes. +[^1]: Notes are synced from the Notecard to Notehub every 10 minutes. See the `OUTBOUND_MINS` macro in lightning_detector.ino if you want to change the number of minutes. diff --git a/47-cellular-speed-radar-and-camera/README.md b/47-cellular-speed-radar-and-camera/README.md index 159aec62..b938301c 100644 --- a/47-cellular-speed-radar-and-camera/README.md +++ b/47-cellular-speed-radar-and-camera/README.md @@ -4,12 +4,12 @@ Detect speeding cars with a speed radar module and camera. Publish the speeds an ## Overview -This application continuously grabs images from an [OpenMV](https://openmv.io/) camera board running [MicroPython](https://micropython.org/) and runs them through an object detection model built using [Edge Impulse](https://edgeimpulse.com/) to test for the presence of a moving car. If a moving car is detected, the speed of that car is measured using an [OmniPreSense](https://omnipresense.com) Doppler radar sensor. If that speed exceeds a configurable speed limit, the speed and current time are recorded and synced to [Notehub](https://www.notehub.io/) via a [Notecard](https://blues.io/products/notecard/). +This application continuously grabs images from an [OpenMV](https://openmv.io/) camera board running [MicroPython](https://micropython.org/) and runs them through an object detection model built using [Edge Impulse](https://edgeimpulse.com/) to test for the presence of a moving car. If a moving car is detected, the speed of that car is measured using an [OmniPreSense](https://omnipresense.com) Doppler radar sensor. If that speed exceeds a configurable speed limit, the speed and current time are recorded and synced to [Notehub](https://www.notehub.io/) via a [Notecard](https://blues.com/products/notecard/). ## You Will Need -* [Notecard](https://blues.io/products/notecard/) -* [Notecarrier A](https://blues.io/products/notecarrier/notecarrier-a/) +* [Notecard](https://blues.com/products/notecard/) +* [Notecarrier A](https://blues.com/products/notecarrier/notecarrier-a/) * [OpenMV Cam H7](https://openmv.io/products/openmv-cam-h7) * [OmniPreSense OPS243-A Doppler Radar Sensor](https://omnipresense.com/product/ops243-doppler-radar-sensor/) * 5V, 1A DC power supply diff --git a/48-water-quality-monitor/README.md b/48-water-quality-monitor/README.md index 97dd2de0..d7f44544 100644 --- a/48-water-quality-monitor/README.md +++ b/48-water-quality-monitor/README.md @@ -5,9 +5,9 @@ Collect water quality metrics from various sensors and upload them to the cloud ## You Will Need * [Visual Studio Code (VS Code)](https://code.visualstudio.com/) with the [PlatformIO extension](https://platformio.org/) -* [Notecarrier F](https://blues.io/products/notecarrier/notecarrier-f/) -* [Notecard](https://blues.io/products/notecard/) -* [Swan](https://blues.io/products/swan/) +* [Notecarrier F](https://blues.com/products/notecarrier/notecarrier-f/) +* [Notecard](https://blues.com/products/notecard/) +* [Swan](https://blues.com/products/swan/) * [Gravity: Analog ORP Sensor Meter for Arduino](https://www.dfrobot.com/product-1071.html) * [Gravity: Analog Industrial pH Sensor / Meter Pro Kit V2](https://www.dfrobot.com/product-2069.html) * [Gravity: Analog TDS Sensor/ Meter for Arduino](https://www.dfrobot.com/product-1662.html) diff --git a/49-hvac-current-monitor/README.md b/49-hvac-current-monitor/README.md index f49831bb..beef7685 100644 --- a/49-hvac-current-monitor/README.md +++ b/49-hvac-current-monitor/README.md @@ -5,9 +5,9 @@ Measure the current consumption of an HVAC unit and publish the measurements to ## You Will Need * [Visual Studio Code (VS Code)](https://code.visualstudio.com/) with the [PlatformIO extension](https://platformio.org/) -* [Notecarrier F](https://blues.io/products/notecarrier/notecarrier-f/) -* [Notecard](https://blues.io/products/notecard/) -* [Swan](https://blues.io/products/swan/) +* [Notecarrier F](https://blues.com/products/notecarrier/notecarrier-f/) +* [Notecard](https://blues.com/products/notecard/) +* [Swan](https://blues.com/products/swan/) * Window HVAC unit * [SCT013-030 30A 1V Non-invasive Split Core Current Transformer Sensor](https://www.amazon.com/gp/product/B07WT7KGTT) * [TRRS 3.5mm Audio Jack Breakout](https://www.amazon.com/gp/product/B07L3P93ZD) diff --git a/50-smart-co2-sensor/README.md b/50-smart-co2-sensor/README.md index 00c68d46..fc18e416 100644 --- a/50-smart-co2-sensor/README.md +++ b/50-smart-co2-sensor/README.md @@ -10,14 +10,14 @@ see whether the current CO2 levels are cause for concern. When an alarm event is triggered, then an alarm is sounded and a Twilio message is generated to warn employees and/or patrons of dangerous CO2 levels. Periodic samples of atmospheric CO2 are recorded and synced to [Notehub](https://www.notehub.io/) -via a [Notecard](https://blues.io/products/notecard/). +via a [Notecard](https://blues.com/products/notecard/). ## You Will Need -* [Notecard](https://blues.io/products/notecard/) -* [Notecarrier F](https://blues.io/products/notecarrier/notecarrier-f/) +* [Notecard](https://blues.com/products/notecard/) +* [Notecarrier F](https://blues.com/products/notecarrier/notecarrier-f/) * [Adafruit FeatherWing OLED - 128x32](https://www.adafruit.com/product/3045) -* [Blues Swan](https://blues.io/products/swan) +* [Blues Swan](https://blues.com/products/swan) * [DFRobot Gravity: Digital Speaker Module](https://wiki.dfrobot.com/DFRobot_Speaker_v1.0_SKU__FIT0449) * [DFRobot Gravity: UART Infrared Carbon Dioxide Sensor (0-50000 ppm)](https://wiki.dfrobot.com/Infrared_CO2_Sensor_0-50000ppm_SKU__SEN0220) * Momentary push button @@ -154,11 +154,11 @@ variables](https://dev.blues.io/guides-and-tutorials/notecard-guides/understandi you may wish to configure: - `alarm_threshold`: This is the ppm value where the alarm should trigger. -- `wifi_ssid`: The Notecard WBNAW has a built-in Wi-Fi antenna. It will connect -via cellular out of the box, but if Wi-Fi ssid and password are provided, then -it will prefer to connect over Wi-Fi. You are able to test and deploy this +- `wifi_ssid`: The Notecard WBNAW has a built-in WiFi antenna. It will connect +via cellular out of the box, but if WiFi ssid and password are provided, then +it will prefer to connect over WiFi. You are able to test and deploy this device in separate locations without having to recompile the firmware. -- `wifi_password`: The Wi-Fi password used to update the current configuration. +- `wifi_password`: The WiFi password used to update the current configuration. To change these values, go to your Notehub project, find the device you wish to update. Click into the device detail page, then click the Environment tab. Now, diff --git a/50-smart-co2-sensor/src/SmartCO2Sensor.cpp b/50-smart-co2-sensor/src/SmartCO2Sensor.cpp index 941c9091..762f2913 100644 --- a/50-smart-co2-sensor/src/SmartCO2Sensor.cpp +++ b/50-smart-co2-sensor/src/SmartCO2Sensor.cpp @@ -25,7 +25,7 @@ HardwareSerial stlinkSerial(PIN_VCP_RX, PIN_VCP_TX); #endif #define myProductID PRODUCT_UID -static const char * ENV_VAR_LIST[] = {"alarm_threshold", "wifi_ssid", "wifi_password"}; +static const char *ENV_VAR_LIST[] = {"alarm_threshold", "wifi_ssid", "wifi_password"}; static const uint32_t THREE_MINUTES_MS(3 * 60 * 1000); static const uint32_t FIFTEEN_MINUTES_MS(15 * 60 * 1000); static const int SSD1306_CHAR_WIDTH = 6; @@ -40,12 +40,12 @@ NotecardEnvVarManager *env_var_mgr; // CO2 Threasold Limit Values // https://www.fsis.usda.gov/sites/default/files/media_file/2020-08/Carbon-Dioxide.pdf -static const uint16_t CO2_SAFE = 0; -static const uint16_t CO2_OSHA_LIMIT = 5000; -static const uint16_t CO2_DROWSINESS = 10000; -static const uint16_t CO2_RESPIRATORY = 15000; -static const uint16_t CO2_ACGIH_MAX = 30000; -static const uint16_t CO2_IDLH_EVAC = 40000; +static const uint16_t CO2_SAFE = 0; +static const uint16_t CO2_OSHA_LIMIT = 5000; +static const uint16_t CO2_DROWSINESS = 10000; +static const uint16_t CO2_RESPIRATORY = 15000; +static const uint16_t CO2_ACGIH_MAX = 30000; +static const uint16_t CO2_IDLH_EVAC = 40000; static const uint16_t CO2_LETHAL_LEVEL = 50000; static const uint32_t PIN_BUTTON = D13; @@ -59,19 +59,22 @@ static uint32_t last_report_ms = 0; static char *wifi_ssid = nullptr; static char *wifi_password = nullptr; -struct SensorReadings { +struct SensorReadings +{ double temperature; double voltage; uint16_t co2_ppm; }; -void ISR_buttonPress (void) { +void ISR_buttonPress(void) +{ co2_ready = true; send_immediately = true; ::digitalWrite(LED_BUILTIN, HIGH); } -void alarm (void) { +void alarm(void) +{ ::tone(PIN_BUZZER, 1480, 500); ::delay(500); ::noTone(PIN_BUZZER); @@ -92,30 +95,46 @@ void alarm (void) { ::noTone(PIN_BUZZER); } -const char * co2Message (uint16_t co2_ppm_) { - const char * message; +const char *co2Message(uint16_t co2_ppm_) +{ + const char *message; - if (co2_ppm_ > CO2_LETHAL_LEVEL) { + if (co2_ppm_ > CO2_LETHAL_LEVEL) + { message = "LETHAL LEVELS OF CO2 DETECTED!!!"; - } else if (co2_ppm_ > CO2_IDLH_EVAC) { + } + else if (co2_ppm_ > CO2_IDLH_EVAC) + { message = "CO2 LEVEL IMMEDIATELY DANGEROUS TO LIFE AND HEALTH!"; - } else if (co2_ppm_ > CO2_ACGIH_MAX) { + } + else if (co2_ppm_ > CO2_ACGIH_MAX) + { message = "CO2 level exceeds ACGIH short-term exposure limit."; - } else if (co2_ppm_ > CO2_RESPIRATORY) { + } + else if (co2_ppm_ > CO2_RESPIRATORY) + { message = "CO2 level likely to cause repiratory distress."; - } else if (co2_ppm_ > CO2_DROWSINESS) { + } + else if (co2_ppm_ > CO2_DROWSINESS) + { message = "CO2 level may cause drowsiness."; - } else if (co2_ppm_ > CO2_OSHA_LIMIT) { + } + else if (co2_ppm_ > CO2_OSHA_LIMIT) + { message = "CO2 level exceeds OSHA/ACGIH 8-hour exposure limit."; - } else { + } + else + { message = "CO2 level is within safe limits."; } return message; } -int configureNotecard (void) { - if (J *req = notecard.newRequest("hub.set")) { +int configureNotecard(void) +{ + if (J *req = notecard.newRequest("hub.set")) + { if (myProductID[0]) { JAddStringToObject(req, "product", myProductID); @@ -129,54 +148,74 @@ int configureNotecard (void) { return 0; } -void envVarManagerCb(const char *var, const char *val, void *user_ctx) { +void envVarManagerCb(const char *var, const char *val, void *user_ctx) +{ uint16_t *co2_threashold = (uint16_t *)user_ctx; bool update_wifi = false; - if (strcmp(var, "alarm_threshold") == 0) { + if (strcmp(var, "alarm_threshold") == 0) + { char *end_ptr; uint16_t alarm_threshold = ::strtol(val, &end_ptr, 10); - if (end_ptr != val) { + if (end_ptr != val) + { notecard.logDebugf("[APP] Setting alarm threshold to %uppm.\n", alarm_threshold); *co2_threashold = alarm_threshold; } - } else if (strcmp(var, "wifi_ssid") == 0) { - if (!wifi_ssid || strncmp(wifi_ssid, val, 255) != 0) { - delete(wifi_ssid); - if (256 < strnlen(val, 255)) { - notecard.logDebugf("[ERROR] Wi-Fi SSID is too long! (max: 255)\n"); - } else { + } + else if (strcmp(var, "wifi_ssid") == 0) + { + if (!wifi_ssid || strncmp(wifi_ssid, val, 255) != 0) + { + delete (wifi_ssid); + if (256 < strnlen(val, 255)) + { + notecard.logDebugf("[ERROR] WiFi SSID is too long! (max: 255)\n"); + } + else + { const size_t ssid_len = (strnlen(val, 255) + 1); wifi_ssid = new char[256]; // Allocate as reusable chunk to preserve heap strlcpy(wifi_ssid, val, ssid_len); - notecard.logDebugf("[APP] Updating Wi-Fi SSID to %s.\n", val); + notecard.logDebugf("[APP] Updating WiFi SSID to %s.\n", val); update_wifi = true; } } - } else if (strcmp(var, "wifi_password") == 0) { - if (!wifi_password || strncmp(wifi_password, val, 255) != 0) { - delete(wifi_password); - if (256 < strnlen(val, 255)) { - notecard.logDebugf("[ERROR] Wi-Fi password is too long! (max: 255)\n"); - } else { + } + else if (strcmp(var, "wifi_password") == 0) + { + if (!wifi_password || strncmp(wifi_password, val, 255) != 0) + { + delete (wifi_password); + if (256 < strnlen(val, 255)) + { + notecard.logDebugf("[ERROR] WiFi password is too long! (max: 255)\n"); + } + else + { const size_t password_len = (strnlen(val, 255) + 1); wifi_password = new char[256]; // Allocate as reusable chunk to preserve heap strlcpy(wifi_password, val, password_len); - notecard.logDebug("[APP] Updating Wi-Fi password to "); - for (size_t i = 0; i < password_len; ++i) { + notecard.logDebug("[APP] Updating WiFi password to "); + for (size_t i = 0; i < password_len; ++i) + { notecard.logDebug("*"); } notecard.logDebug(".\n"); update_wifi = true; } } - } else { + } + else + { notecard.logDebugf("[APP] Ignoring unknown environment variable: %s\n", var); } - // Update Wi-Fi credentials (if necessary) - if (update_wifi) { - if (J *req = notecard.newRequest("card.wifi")) { + // Update WiFi credentials (if necessary) + if (update_wifi) + { + if (J *req = notecard.newRequest("card.wifi")) + { JAddItemReferenceToObject(req, "ssid", JCreateString(wifi_ssid)); JAddItemReferenceToObject(req, "password", JCreateString(wifi_password)); notecard.sendRequest(req); @@ -184,17 +223,21 @@ void envVarManagerCb(const char *var, const char *val, void *user_ctx) { } } -void interruptibleDelay (uint32_t delay_ms_) { +void interruptibleDelay(uint32_t delay_ms_) +{ const uint32_t start_ms = ::millis(); - while ((::millis() - start_ms) < delay_ms_) { - if (send_immediately) { + while ((::millis() - start_ms) < delay_ms_) + { + if (send_immediately) + { break; } ::delay(10); } } -void printCO2Concentration (uint16_t co2_ppm_) { +void printCO2Concentration(uint16_t co2_ppm_) +{ char co2_ppm_string[10]; sprintf(co2_ppm_string, "%6uppm", co2_ppm_); display.clearDisplay(); @@ -206,12 +249,16 @@ void printCO2Concentration (uint16_t co2_ppm_) { display.display(); } -uint16_t sampleCo2InPpm (void) { +uint16_t sampleCo2InPpm(void) +{ uint16_t result = 0; - if (!co2_ready) { + if (!co2_ready) + { notecard.logDebug("[APP] CO2 sensor not ready (preheating).\n"); - } else { + } + else + { // Send the request to the sensor txRxPinsSerial.write(CO2_DENSITY_REQ, sizeof(CO2_DENSITY_REQ)); @@ -231,7 +278,8 @@ uint16_t sampleCo2InPpm (void) { notecard.logDebugf("0x%02X ", byte); // Synchronize - if (byte_count == 0 && byte != 0xFF) { + if (byte_count == 0 && byte != 0xFF) + { notecard.logDebugf("\n[ERROR] Unexpected byte from CO2 sensor!\n"); notecard.logDebugf("[WARN] Attempting to reestablish synchronization...\n"); notecard.logDebug("[APP] CO2 sensor response: { "); @@ -239,26 +287,34 @@ uint16_t sampleCo2InPpm (void) { } // Capture PPM hi-byte - if (byte_count == 2) { + if (byte_count == 2) + { result = ((byte & 0xFF) << 8); } // Capture PPM lo-byte - if (byte_count == 3) { + if (byte_count == 3) + { result |= (byte & 0xFF); } // Calculate/validate the checksum - if (byte_count++ < 8) { + if (byte_count++ < 8) + { checksum += byte; - } else { + } + else + { notecard.logDebug("}\n"); // checksum = (~checksum + 1); // Implementation does not match the datasheet checksum = ~checksum; - if (checksum != byte) { + if (checksum != byte) + { notecard.logDebugf("[APP] checksum mismatch! (calculated: %d != provided: %d)\n", checksum, byte); result = 0; - } else { + } + else + { notecard.logDebugf("[APP] CO2 sampled at %dppm.\n", result); } } @@ -269,7 +325,8 @@ uint16_t sampleCo2InPpm (void) { return result; } -int sampleSensors (SensorReadings &readings) { +int sampleSensors(SensorReadings &readings) +{ // Sample the temperature of the Notecard if (J *rsp = notecard.requestAndResponse(notecard.newRequest("card.temp"))) { @@ -299,8 +356,9 @@ int sampleSensors (SensorReadings &readings) { return 0; } -void scrollMessage (const char *message_) { - int first_char_pixel, left_most_pixel; +void scrollMessage(const char *message_) +{ + int first_char_pixel, left_most_pixel; display.clearDisplay(); display.setTextSize(SSD1306_TEXT_SIZE); @@ -311,7 +369,8 @@ void scrollMessage (const char *message_) { // Calculate the left-most pixel (starting position) of the cursor left_most_pixel = -1 * SSD1306_CHAR_WIDTH * SSD1306_TEXT_SIZE * strlen(message_); - for (;;) { + for (;;) + { // Tell the OLED display where to begin printing the message display.setCursor(first_char_pixel, SSD1306_VERT_OFFSET); @@ -323,13 +382,15 @@ void scrollMessage (const char *message_) { // Advance the cursor into the negative space, // until message is no longer visible. - if (--first_char_pixel < left_most_pixel) { + if (--first_char_pixel < left_most_pixel) + { break; } } } -int sendReadingsToNotehub (SensorReadings &readings_) { +int sendReadingsToNotehub(SensorReadings &readings_) +{ J *req = notecard.newRequest("note.add"); if (req != NULL) { @@ -341,7 +402,8 @@ int sendReadingsToNotehub (SensorReadings &readings_) { JAddNumberToObject(body, "voltage", readings_.voltage); JAddNumberToObject(body, "co2", readings_.co2_ppm); } - if (notecard.sendRequest(req)) { + if (notecard.sendRequest(req)) + { const uint32_t now_ms = ::millis(); last_report_ms = now_ms; } @@ -398,9 +460,11 @@ void setup() void loop() { // Check CO2 Sensor preheating interval - if (::millis() > THREE_MINUTES_MS) { + if (::millis() > THREE_MINUTES_MS) + { // Audibly indicate that the CO2 Sensor is ready - if (!co2_ready) { + if (!co2_ready) + { // Do not play tone on roll-over ::tone(PIN_BUZZER, 1047, 250); ::delay(250); @@ -409,13 +473,15 @@ void loop() co2_ready = true; } - if (co2_ready) { + if (co2_ready) + { // Sample the sensors - SensorReadings readings{0.0f,0.0f,0}; + SensorReadings readings{0.0f, 0.0f, 0}; sampleSensors(readings); // Sound alarm - if (readings.co2_ppm > co2_threashold || readings.co2_ppm >= CO2_ACGIH_MAX) { + if (readings.co2_ppm > co2_threashold || readings.co2_ppm >= CO2_ACGIH_MAX) + { alarm(); } @@ -431,7 +497,9 @@ void loop() // Display the CO2 reading printCO2Concentration(readings.co2_ppm); - } else { + } + else + { scrollMessage("Preheating the CO2 sensor..."); } diff --git a/nextjs-template/.github/workflows/CI-PRs-and-main.yml b/nextjs-template/.github/workflows/CI-PRs-and-main.yml index 735c37a3..37e3700b 100644 --- a/nextjs-template/.github/workflows/CI-PRs-and-main.yml +++ b/nextjs-template/.github/workflows/CI-PRs-and-main.yml @@ -13,7 +13,7 @@ jobs: - uses: crazy-max/ghaction-dump-context@v1 - uses: actions/checkout@v2 - uses: volta-cli/action@v1 - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: | node_modules @@ -21,7 +21,7 @@ jobs: key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: ${{ github.workspace }}/.next/cache # Generate a new cache whenever packages or source files change. @@ -61,7 +61,7 @@ jobs: uses: docker/setup-buildx-action@v1 # So now you can use Actions' own caching! - name: Cache Docker layers - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ hashFiles('**/yarn.lock') }} diff --git a/nextjs-template/src/components/layout/Footer.tsx b/nextjs-template/src/components/layout/Footer.tsx index 99c30943..a9d66149 100644 --- a/nextjs-template/src/components/layout/Footer.tsx +++ b/nextjs-template/src/components/layout/Footer.tsx @@ -13,7 +13,7 @@ const FooterComponent = () => { @@ -34,7 +34,7 @@ const FooterComponent = () => { diff --git a/nextjs-template/src/services/SignalStrengths.ts b/nextjs-template/src/services/SignalStrengths.ts index 479db6df..29758b61 100644 --- a/nextjs-template/src/services/SignalStrengths.ts +++ b/nextjs-template/src/services/SignalStrengths.ts @@ -1,4 +1,4 @@ -// Wi-Fi, Cellular, or LoRa +// WiFi, Cellular, or LoRa export type SignalStrengths = "N/A" | "0" | "1" | "2" | "3" | "4"; export function barsToSignalStrengths(bars: number): SignalStrengths {