IoT for Beginners Curriculum Kit
This hands-on curriculum introduces the end-to-end principles of the Internet of Things across real-world domains such as digital agriculture, logistics, retail, manufacturing, and consumer smart devices. Working with either a microcontroller development board programmed in C++ or a single-board computer running Python, students interface digital and analog sensors to measure environmental telemetry including temperature, humidity, soil moisture, ambient light, distance, and geospatial position. They also assemble and control physical actuators including relays, motorized fluid pumps, status LEDs, and cameras, or explore equivalent setups through virtual hardware simulation. Students learn device-to-cloud communication using the MQTT protocol, bidirectional cloud management with Azure IoT Hub, serverless backend compute using Azure Functions, and edge intelligence applications spanning voice processing and computer vision.
Uploaded by demo on 2026-09-03 · ready · Electronics · Original source ↗
Files: README.md · SECURITY.md · hardware.md · soil_moisture_trigger_requirements.txt · wio_nightlight_platformio.ini
Readiness checks
-
complete 2026-09-03 18:38 🛡 Cybersecurity: Review before networking · 9 findings 52 searches · 21 pagesview · PDF
Latest report — 2026-09-03 18:38
Readiness: IoT for Beginners Curriculum Kit
Verdict: Ready with caveats · 2026-09-03 · est. parts cost $310-$340 per complete dual-track station (about $150-$190 for the Wio Terminal track alone, $200-$230 for the Raspberry Pi track alone) Cybersecurity — software & network: Review before networking
This is the cold check for this lab - there is no previous report, so everything below is the baseline the next check will measure drift against. Every load-bearing electronic module can be ordered today: the Wio Terminal is Active with 453 in stock at $36.25, and the Grove Base Hat, ReSpeaker HAT and the whole Grove sensor set are Active at an authorized distributor. Four caveats keep it off a clean "Ready". The two pre-packaged starter kits the curriculum tells instructors to buy could not be found for sale as bundles, so the kit has to be assembled part by part. The official Raspberry Pi Camera Module v2 is discontinued through authorized distribution - zero stock across ECIA distributors and a 14-week factory lead time - so it needs a retail purchase or the IMX219 substitute. The Seeed 6 V water pump is obsolete, and its substitute's 5 V operation is unverified. And the Raspberry Pi 4 Model B 2 GB is $102.91 at the only authorized source checked, which dominates the bill of materials. None of this blocks the course: the Wio Terminal track and the CounterFit simulator path are unaffected.
Action required
| Part | Problem | Recommended action |
|---|---|---|
| Seeed Wio Terminal Starter Kit (SKU 5006) | No listing found for the bundle at any distributor or retailer this run | Buy the constituent parts individually - all are listed below and sourceable |
| Seeed Raspberry Pi 4 Starter Kit (SKU 5004) | No listing found for the bundle; searches returned Pi 5 and GrovePi+ kits instead | Buy the constituent parts individually |
| Raspberry Pi Camera Module v2 (SC0023) | Discontinued at DigiKey; 0 stock across ECIA distributors (Mouser out of stock, DigiKey 14-week lead time) | Order the Seeed IMX219 module ($9.90) or buy the official module at retail ($15.00) |
| Seeed 6 V Mini Water Pump (SKU 1945) | Both Seeed pumps at DigiKey are Obsolete with 0 stock | Substitute DFRobot FIT0563 at $9.20, but read its datasheet first - 5 V operation is unverified |
| Seeed Grove LED Pack (SKU 4364) | No distributor or retail listing for the pack | Buy 2 x Grove Red LED modules ($2.10 each); they keep the LED socket and the brightness potentiometer |
| Raspberry Pi 4 Model B 2 GB | $102.91 at the only authorized source found; largest single line item | Check education/retail channels before ordering; the snapshot also permits Pi 2B/3B/3B+ for headless use |
| Grove Time of Flight Sensor (101020532) | 0 stock at DigiKey | Order from Mouser - 47 in stock at $10.63 (ECIA/TrustedParts) |
Cybersecurity — software & network
Review before networking — The simulator students run locally is pinned to Flask and eventlet versions with known network-reachable flaws the project's own pins block upgrading, the lessons carry telemetry and actuator commands over unencrypted MQTT, and the whole firmware toolchain is unpinned and uncheckable.
| Component | Version | How known | Support status |
|---|---|---|---|
| CounterFit (virtual IoT hardware simulator) | not determined | unpinned (The curriculum links the CounterFit-IoT/CounterFit repository with no tag, commit or release; the repository's main branch was listed this run.) | — |
| Flask (CounterFit web UI) | 2.1.2 | read from project (counterfit-app/setup.py install_requires pins "Flask==2.1.2") | — |
| Flask-SocketIO (CounterFit browser/device channel) | 5.2.0 | read from project (counterfit-app/setup.py install_requires pins "Flask-SocketIO==5.2.0") | — |
| eventlet (CounterFit WebSocket server) | 0.33.3 | read from project (counterfit-app/setup.py install_requires pins "eventlet==0.33.3") | — |
| setuptools (CounterFit build/install) | 65.5.0 | inferred (counterfit-app/requirements.txt writes "setuptools =65.5.0" with a single '=', which pip does not read as a pin; the version was taken from that line) | — |
| pytest (CounterFit test suite) | 7.2.2 | read from project (counterfit-app/setup.py tests_require lists 'pytest==7.2.2') | — |
| black (CounterFit repository tooling) | 23.1.0 | inferred (repository-root requirements.txt writes "black =23.1.0" with a single '='; the version was taken from that line) | — |
| azure-functions (soil-moisture cloud trigger) | not determined | unpinned (bare package name in soil_moisture_trigger_requirements.txt (snapshot)) | — |
| azure-iot-hub (device management SDK) | not determined | unpinned (bare package name in soil_moisture_trigger_requirements.txt (snapshot)) | — |
| Docsify / docsify-cli (offline documentation viewer) | not determined | unpinned (README.md tells the reader to run 'docsify serve' with no version constraint (snapshot)) | — |
| PlatformIO Atmel SAM platform (atmelsam) | not determined | unpinned (wio_nightlight_platformio.ini declares 'platform = atmelsam' with no version (snapshot)) | — |
| PlatformIO board target seeed_wio_terminal | not determined | unpinned (wio_nightlight_platformio.ini declares 'board = seeed_wio_terminal' with no version (snapshot)) | — |
| Arduino Core for SAMD (Wio Terminal firmware framework) | not determined | unpinned (wio_nightlight_platformio.ini declares 'framework = arduino' with no version (snapshot)) | — |
| Interactive quiz web app (ff-quizzes.netlify.app) | not determined | not determined (third-party hosted site linked from README.md; no version or source pin (snapshot)) | — |
| Raspberry Pi OS / host operating system | not determined | not determined (no OS version or release codename is recorded in the snapshot) | — |
| Component | Finding | Severity | Fix available? |
|---|---|---|---|
| black (CounterFit repository tooling) | black 23.1.0 is the code formatter listed for people who clone the CounterFit repository to work on it — it is not installed by students running the labs, and the critical item is an attack on the project's own GitHub formatting action rather than on anything in the classroom. — PYSEC-2026-2120, PYSEC-2026-2121, GHSA-fj7x-q9j7-g6q6 | critical | Yes — update to 26.3.1 or later, which matters only if staff clone the CounterFit repository for development. |
| Flask (CounterFit web UI) | The simulator's web interface runs on Flask 2.1.2, which can omit the 'Vary: Cookie' header and let a shared cache or proxy hand one browser's session cookie to the next person. — GHSA-m2qf-hxjv-5gpq, GHSA-68rp-wp8r-4726 | high | No — project pins Flask==2.1.2 in counterfit-app/setup.py; mitigation only — run CounterFit on the student's own machine rather than on a shared or public network. |
| setuptools (CounterFit build/install) | The setuptools version listed in the simulator's requirements (65.5.0) has arbitrary-file-write and command-injection flaws that fire while it downloads packages, so an install pointed at a hostile package index could run code on the student's machine. — GHSA-5rjg-fvgr-3xxf, GHSA-cx63-2mw6-8hw5, GHSA-r9hx-vwmv-q579, GHSA-h35f-9h28-mq5c | high | Yes — update to 78.1.1 or later; the requirements row is malformed ('setuptools =65.5.0'), so nothing in the project actually holds the old version in place. |
| eventlet (CounterFit WebSocket server) | The network server the simulator listens on (eventlet 0.33.3) is affected by a denial-of-service issue and an HTTP request-smuggling issue; both need someone able to reach the simulator over the network. — GHSA-3rq5-2g8h-59hc, GHSA-hw6f-rjfj-j7j7 | moderate | No — project pins eventlet==0.33.3 in counterfit-app/setup.py; mitigation only — keep the simulator on localhost or an isolated lab network. |
| pytest (CounterFit test suite) | pytest 7.2.2 is pulled in only when the simulator's own test suite is run; the flaw is in temporary-directory handling on a shared machine. — GHSA-6w46-j5rx-g56g | moderate | Yes — update to 9.0.3 or later; test tooling only, not part of a student install. |
| CounterFit (virtual IoT hardware simulator) | Dependencies unpinned: 8 of 8 in counterfit-app/requirements.txt — every row is written with a single '=' ('flask =2.1.2'), which pip does not read as a version pin, so an install picks up whatever is current that day and its security state cannot be re-checked from the file. | posture | Mitigation only — pin versions / use the lockfile, and record the versions actually installed in the lab materials. |
| CounterFit (virtual IoT hardware simulator) | The curriculum points students at the simulator's repository with no tag, release or commit, so every classroom install is whatever the project happened to publish that day. | posture | Mitigation only — install one named release, record it in the lab materials, and re-check it each term. |
| MQTT telemetry and actuator control | Lessons stream sensor telemetry and actuator commands to MQTT brokers over unencrypted TCP port 1883, so anyone who can see that traffic can read the readings and the commands sent to the relay and pump. | posture | Mitigation only — use the broker's TLS port 8883 where it offers one, and keep lab devices on their own network segment. |
| Raspberry Pi remote access (SSH) | The Raspberry Pi track sets the board up for headless access with SSH listening on port 22, and the lab materials do not record changing the Pi's account password, so that step is left entirely to the instructor. | posture | Mitigation only — set a non-default password or key-only login before the Pi joins any shared or campus network. |
What this means for your lab
Most of this lab's software risk sits in one place: CounterFit, the simulator students run on their own PC, which serves a web page and a WebSocket connection from pinned older libraries. Someone else on the same network who can reach that simulator could disrupt it, and on a shared machine or through a shared proxy a session could leak between browsers; the project pins those library versions itself, so the practical answer is to run the simulator on the student's own machine and not expose it to the wider network. Separately, the MQTT lessons send sensor readings and actuator commands in the clear over port 1883, so anyone watching the network can read them and, on a public test broker, see what your devices are doing — use the TLS port where the broker offers one. The Raspberry Pi track turns on SSH for headless work and the materials never say to change the account password, so do that before the Pi touches a campus network. Nothing here suggests the lab is unsafe to teach; it does mean the devices and the simulator belong on an isolated lab network rather than on the main campus one, and it is worth raising with campus IT before connecting anything. The Arduino and PlatformIO firmware side could not be checked at all — those ecosystems have no vulnerability database, so treat 'no findings' there as 'unknown', not 'clean'.
Not checked
- PlatformIO Atmel SAM platform (atmelsam): unpinned in wio_nightlight_platformio.ini, and PlatformIO platform packages have no vulnerability database
- PlatformIO board target seeed_wio_terminal: unpinned board definition; no vulnerability database for board support packages
- Arduino Core for SAMD: unpinned framework; Arduino cores and libraries have no advisory database, so absence of findings is not evidence of safety
- azure-functions: listed without a version in soil_moisture_trigger_requirements.txt — no version exists to check
- azure-iot-hub: listed without a version in soil_moisture_trigger_requirements.txt — no version exists to check
- docsify-cli: README.md gives no version constraint — no version exists to check
- Interactive quiz web app (ff-quizzes.netlify.app): third-party hosted web service with no version or source pin; nothing checkable
- CounterFit application code itself: source-only project installed from the repository's main branch; no advisory database covers it, and no release is pinned
- Raspberry Pi OS / host operating system: no OS version or release codename is recorded in the snapshot, so no support-status lookup was possible
Parts
Complete pre-packaged kits
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| Seeed Wio Terminal Starter Kit (SKU 5006) | Boxed bundle: Wio Terminal, Grove modules, Arducam, ReSpeaker HAT | not checked (no bundle listing found) | — | — | — |
| Seeed Raspberry Pi 4 Starter Kit (SKU 5004) | Boxed bundle: Pi 4, Grove Base Hat, Grove sensors | not checked (no bundle listing found) | — | — | — |
Arduino track hardware (Wio Terminal platform)
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| Wio Terminal (Seeed 102991299) | ATSAMD51P19A + RTL8720DN, 2.4in LCD, 5 V USB-C in, 3.3 V logic | Active - readily available | 453 | $36.25 | DigiKey |
| USB-C connection cable | USB-C plug to host USB-A or USB-C, USB 2.0 data | not checked (commodity) | — | — | — |
| ArduCam Mini 2MP Plus OV2640 (B0067) | 34 x 24 mm module, 8-pin 2.54 mm header, 3.3-5 V VCC | available at retail; exact SKU unverified | — | $35.85 | eBay (usa*stores); not carried by DigiKey |
| ReSpeaker 2-Mics Pi HAT (Seeed 107100001) | Pi HAT 65 x 56 mm, WM8960 codec, I2S + I2C | Active - readily available | 1,197 | $12.90 | DigiKey |
| Breadboard jumper wire pack (Seeed SKU 234) | 24-28 AWG Dupont, F-F and M-F ends | no listing for the Seeed pack; commodity substitute available | — | $2.45-$4.95 | PiShop USA / ZYLtech |
| Mono enclosed speaker 2 W 6 Ohm (Seeed SKU 2832) | Enclosed speaker, 2-pin JST 2.0; or 3.5 mm headphones | available at retail; rating unverified | — | $3.78 | OpenELAB |
| MicroSD card, 16 GB maximum | microSDHC Class 4/10, FAT16/FAT32; >16 GB will not mount | readily available | — | $7.00-$14.95 | eBay / Walmart / Best Buy |
Raspberry Pi track hardware
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| Raspberry Pi 4 Model B 2 GB (SC0400DE) | 85.09 x 55.88 mm SBC, 40-pin GPIO, 5 V USB-C at 3 A | Active - available, price is the issue | 133 | $102.91 | DigiKey |
| MicroSD card 16-32 GB (Pi track) | Class 10 / UHS-I / A1 | readily available | — | $7.00-$14.95 | eBay / Walmart |
| Raspberry Pi USB-C power supply | 5.1 V DC, 3.0 A minimum | readily available | — | $7.99 | Micro Center (also DigiKey at $8.00) |
| Grove Base Hat for Raspberry Pi (Seeed 103030275) | Pi HAT, 15 Grove ports, STM32 ADC at I2C 0x04 | Active - available, thin stock | 109 | $8.06 | DigiKey |
| Raspberry Pi Camera Module v2 (SC0023) | 25 x 24 mm, Sony IMX219 8 MP, 15-pin 1 mm FFC | discontinued through authorized distribution | 0 | $15.00-$25.99 retail | Seeed Studio / Newegg; substitute below |
| Pi audio input/output peripherals | USB mic + speaker, USB headset, ReSpeaker HAT, or USB speakerphone | ReSpeaker path available; USB options not checked | 1,197 | $12.90 | DigiKey (ReSpeaker HAT) |
| Grove Light Sensor v1.2 (Seeed 101020132) | Grove 4-pin, LS06-S phototransistor, analog out | Active - readily available | 173 | $2.12 | DigiKey |
| Grove Button (Seeed 101020003) | Grove 4-pin, momentary tactile, active-high | Active - readily available | 619 | $1.90 | DigiKey |
Shared sensors and actuators
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| Grove LED Pack (Seeed SKU 4364), qty 2 modules | Grove 4-pin LED socket board with rotary brightness pot | no listing for the pack; substitute below | — | — | — |
| Grove Temperature and Humidity Sensor DHT11 (Seeed 101020011) | Grove 4-pin, DHT11, single-wire digital | Active - available, modest stock | 67 | $5.00 | DigiKey (also Master Electronics, 98 at $6.39) |
| Grove Capacitive Moisture Sensor (Seeed 101020614) | Corrosion-resistant probe, Grove 4-pin, analog out | Active - readily available | 436 | $6.50 | DigiKey |
| Grove Relay (Seeed 103020005) | Grove 4-pin, 5 V coil, screw terminals, 250 VAC / 5 A | Active - readily available | 817 | $2.90 | DigiKey |
| Grove GPS Air530 (Seeed 109020022) | Grove 4-pin, GNSS with patch antenna, 9600 baud NMEA | Active - readily available | 855 | $11.00 | DigiKey |
| Grove Time of Flight Distance Sensor VL53L0X (Seeed 101020532) | Grove 4-pin, VL53L0X, I2C 0x29 | Active at DigiKey but out of stock; in stock at Mouser | 0 at DigiKey / 47 at Mouser | $9.086 at DigiKey, $10.63 at Mouser | DigiKey / ECIA |
Optional automated plant watering hardware
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| Seeed 6 V Mini Water Pump (SKU 1945) | Mini DC immersible pump, 3.5-6.0 V, 200-500 mA | obsolete - both Seeed pumps at DigiKey are Obsolete, 0 stock | 0 | $6.90 (obsolete listing) | DigiKey; substitute below |
| Adafruit USB terminal block breakout (3628) | USB-A male plug to 5-pin terminal block, 5 mm pitch, 26-16 AWG | available (stock not stated on the page) | — | $4.95 | Adafruit |
| Flexible silicone tubing, 4-6 mm ID | Aquarium/food-grade tubing, 0.5-1 m | not checked (non-electrical commodity) | — | — | — |
| Hookup wire, red and black 22-26 AWG | Stranded copper, 2 x 15-30 cm | not checked (commodity) | — | — | — |
| Precision flat-head screwdriver | 1.5-2.5 mm slotted tip | not checked (hand tool) | — | — | — |
Virtual simulation fallback and physical supplies
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| Virtual host system peripherals | Workstation with webcam, microphone, speakers | not checked | — | — | — |
| Non-technical agricultural supplies | Potted plant with soil; fresh and bruised produce | not checked (bought locally) | — | — | — |
Substitutes
| For part | Substitute | Differences | Verified | Judgment |
|---|---|---|---|---|
| Raspberry Pi Camera Module v2 (SC0023, discontinued) | Seeed 114992267, $9.90, Active, 30 in stock (alt: 114992266, $12.90, 160-degree lens) | Same Sony IMX219 8 MP sensor the snapshot names, same "RPi V2 camera" module class per the distributor record; 77-degree lens vs the official module's lens - a framing difference in the vision lessons, not a compatibility one; cheaper than the retail official part | Verified: sensor (IMX219 8 MP) and module class from the DigiKey record, status/stock/price from DigiKey, second-source corroboration from ECIA. Not verified: the 15-pin 1 mm FFC connector and PCB footprint (no parameters block returned), and lens field of view vs the official module | Acceptable - the curriculum's camera code targets the IMX219 sensor |
| Grove LED Pack (SKU 4364, no listing) | Seeed 104030005 "Grove Red LED", $2.10, Active, 915 in stock - buy 2 | Keeps both things the lab needs: a plug-in LED holder (so the pack's assorted 5 mm LEDs still fit) and the onboard rotary potentiometer students adjust for brightness; Grove 4-pin connector as before | Verified: onboard brightness potentiometer and plug-in LED holder (Seeed wiki page fetched this run), Grove module identity, lifecycle, stock and price (DigiKey). Not verified: numeric supply-voltage range - the wiki says only "higher range of input voltages" and no parameters block was returned | Acceptable - the snapshot explicitly allows any Grove digital LED socket module |
| Seeed 6 V Mini Water Pump (SKU 1945, obsolete) | DFRobot FIT0563, $9.20, Active, 126 in stock | Same class of part (miniature immersible DC pump) and same 6 V nominal rating; the snapshot allows any 5-6 V DC mini submersible pump run from a 5 V USB rail, but the lab drives this one from 5 V through the Grove relay, so it must actually run at 5 V | Verified: part class, 6 V nominal rating, lifecycle, stock and price (DigiKey record). Not verified: the operating voltage range - whether it runs at the lab's 5 V rail - and its current draw; DigiKey returned no parameters block and the DFRobot product page could not be fetched | Plausible, unverified - read the datasheet for 5 V operation before ordering |
| Breadboard jumper wire pack (Seeed SKU 234, no listing) | Retail Dupont ribbon sets: F-F 40-pin $2.95, M-F 40-pin $4.95 | Same Dupont 2.54 mm terminations in the female-to-female and male-to-female mixes the ReSpeaker-to-Wio wiring needs; sold as ribbon sets rather than an assorted-length pack | Verified: nothing beyond the listing titles, which state the F-F and M-F Dupont ends. Not verified: wire gauge against the snapshot's 24-28 AWG range - the listings do not state it and the pages were not fetched | Plausible, unverified - low risk, but confirm the gauge with the seller |
| Mono enclosed speaker 2 W 6 Ohm (SKU 2832, no distributor listing) | Retail "Seeed Studio Mono Enclosed Speaker", $3.78; or any 3.5 mm headphones | Listing title matches the product name; the snapshot also accepts any standard 3.5 mm analog headphones, which sidesteps the question entirely | Verified: nothing beyond the listing title matching the product name. Not verified: the 2 W / 6 Ohm rating and the 2-pin JST-PH 2.0 connector - the product page was not fetched | Plausible, unverified - the headphone path makes this low-risk either way |
Verify any substitute against its datasheet before ordering - the "not verified" notes above are the specific claims this check could not confirm from evidence.
Other dependencies
- Custom fabrication: none required. The snapshot confirms there are no Gerber files, ODB++ archives or custom CAD layouts - every board in the lab is a commercial off-the-shelf product connected with Grove cables, Dupont jumpers or 40-pin stacking headers.
- Seeed Studio product pages (12 URLs) - not usable as status evidence this run. Every one of them returned the same 6,462-character export-compliance boilerplate instead of product data; seeedstudio.com is JavaScript-rendered and the fetcher sees only the wrapper. The URLs resolve, but no price or stock could be read from them, which is why the Seeed parts above are priced from DigiKey and shopping results instead.
- arducam.com and raspberrypi.com product pages - not fetched. Both refused the request (blocked or timed out), so the ArduCam and Raspberry Pi vendor pages are not on the record.
- Adafruit product page (adafruit.com/product/3628) - live and readable, with current price breaks and a distributor list.
- Community links (Microsoft Foundry Discord invite, Microsoft Foundry developer forum) - not checked; not load-bearing for running the lab.
Watch list
- Raspberry Pi Camera Module v2 - already gone from authorized distribution with a 14-week factory lead time; expect the retail listings to thin out next, and plan on the IMX219 substitute becoming the default path.
- 16 GB microSD cards - the Wio Terminal bootloader hard-caps at 16 GB, so this line cannot follow the market up to 32 GB and larger. Small cards are still sold, but they are the part most likely to quietly disappear.
- Grove Base Hat (103030275) - only 109 units at the distributor checked, and the lab cannot substitute it: grove.py addresses this board's STM32 ADC registers directly. A class of 20+ should order early.
- Grove Time of Flight sensor (101020532) - already at zero at DigiKey and carried by one other distributor with 47 units; the next check should confirm it has not gone the way of the pump.
- Grove DHT11 (101020011) - 67 units at DigiKey and 98 at the second source; thin for a full class ordering at once.
- Seeed starter-kit bundles (5006 and 5004) - the curriculum's recommended purchase route did not turn up for sale anywhere this run. If Seeed has retired them, the lab's shopping instructions need rewriting even though every constituent part is still available.
- Raspberry Pi 4 2 GB pricing - $102.91 through authorized distribution makes the Pi track roughly twice the cost of the Wio track; worth re-pricing each term.
Snapshot What the lab depended on when it was uploaded — the baseline the readiness checks research against.
This curriculum kit builds an end-to-end multi-tier Internet of Things (IoT) educational system covering sensor telemetry, actuation, edge device logic, and cloud data processing across five application domains (agriculture, logistics, manufacturing, retail, and consumer smart devices). The hardware architecture provides two alternate physical paths: an embedded microcontroller path centered on the Seeed Studio Wio Terminal (Microchip ATSAMD51 ARM Cortex-M4F core operating at 3.3 V logic with 5 V USB power) programmed in C++ using Arduino/PlatformIO, and a single-board computer path centered on the Raspberry Pi (Raspberry Pi 4 Model B or legacy Pi 2B/3B/3B+ operating at 3.3 V GPIO logic with a 5 V DC power rail) programmed in Python, supplemented by a pure-software fallback simulating hardware via the CounterFit framework. All sensor and actuator modules connect via standard 4-pin Seeed Studio Grove connectors operating on 3.3 V or 5 V logic rails, with auxiliary peripherals including SPI cameras, CSI cameras, I2S audio codecs/HATs, and an optional 5 V to 6 V DC mini water pump switched via relay.
Bill of Materials
Complete Pre-Packaged Kits
Seeed Studio Wio Terminal Starter Kit
- Identity: Seeed Studio "IoT for beginners with Seeed and Microsoft - Wio Terminal Starter Kit", Seeed SKU: 5006
- Quantity: 1 kit
- Footprint/package: Boxed commercial starter bundle containing the Wio Terminal, Grove modules, Arducam OV2640, ReSpeaker Pi HAT, and jumper cables
- Electrical constraints: 5 V DC input via USB-C
- Substitution latitude: Direct bundle of individual parts listed below. Any assembly containing the exact individual components listed for the Wio Terminal track is functionally equivalent.
- Control status: Kit container; contains student-operated controls on constituent boards
- Sourcing plan: distributor lookup: 5006
Seeed Studio Raspberry Pi 4 Starter Kit
- Identity: Seeed Studio "IoT for beginners with Seeed and Microsoft - Raspberry Pi 4 Starter Kit", Seeed SKU: 5004
- Quantity: 1 kit
- Footprint/package: Boxed commercial starter bundle containing Raspberry Pi 4, Grove Base Hat, Grove sensors, and accessories
- Electrical constraints: 5 V DC input via USB-C (≥ 3.0 A)
- Substitution latitude: Direct bundle of individual parts listed below. Any assembly containing the exact individual components listed for the Raspberry Pi track is functionally equivalent.
- Control status: Kit container; contains student-operated controls on constituent boards
- Sourcing plan: distributor lookup: 5004
Arduino Track Hardware (Wio Terminal Platform)
Microcontroller Development Board: Seeed Studio Wio Terminal
- Identity: Seeed Studio Wio Terminal, Seeed SKU: 4509. Core IC: Microchip ATSAMD51P19A (120 MHz ARM Cortex-M4F with FPU, 512 KB Flash, 192 KB RAM); Wireless IC: Realtek RTL8720DN (dual-band 2.4 GHz / 5 GHz Wi-Fi and Bluetooth 5.0 BLE)
- Quantity: 1
- Footprint/package: Enclosed handheld dev board (72 mm x 57 mm x 12 mm) with integrated 2.4-inch 320x240 TFT LCD, 40-pin Raspberry Pi-compatible GPIO header, 2 onboard Grove ports, 3 pushbuttons, a 5-way analog joystick/switch, built-in light sensor, IMU (LIS3DHTR), buzzer, and microSD slot
- Electrical constraints: 5 V DC input via USB-C; MCU internal core and GPIO logic operate at 3.3 V; Grove I/O lines operate at 3.3 V
- Substitution latitude: Must be the Seeed Studio Wio Terminal (SKU 4509). Curriculum firmware directly accesses onboard hardware peripherals (LCD, internal light sensor, 5-way switch, RTL8720DN Wi-Fi coprocessor) via the Seeed Wio Terminal board support library.
- Control status: Yes; students operate the top buttons and 5-way tactile navigation joystick during labs
- Sourcing plan: distributor lookup: 4509
USB Connection Cable
- Identity: USB-C to USB-A cable or USB-C to USB-C cable / adapter
- Quantity: 1
- Footprint/package: Cable assembly, USB Type-C plug to host PC plug (Type-A or Type-C)
- Electrical constraints: 5 V DC power and USB 2.0 data lines (D+/D-)
- Substitution latitude: Any standard USB data/charging cable providing reliable USB 2.0 communication
- Control status: Set-once connection
- Sourcing plan: retail shopping search: USB-C data cable
SPI Camera Module: ArduCam Mini 2MP Plus - OV2640
- Identity: Arducam Mini 2MP Plus with OV2640 CMOS sensor, Arducam Model: B0067
- Quantity: 1
- Footprint/package: PCB module (34 mm x 24 mm) with 8-pin 0.1-inch (2.54 mm) male header (CS, MOSI, MISO, SCK, GND, VCC, SDA, SCL) and M12 lens mount
- Electrical constraints: 3.3 V to 5 V DC VCC; 3.3 V SPI and I2C signal lines
- Substitution latitude: Must be Arducam Mini 2MP Plus - OV2640 (B0067) or identical SPI/I2C bridge hardware; Wio Terminal C++ code links specifically against ArduCam's SPI camera driver library.
- Control status: Set-once optical focus ring adjustment
- Sourcing plan: distributor lookup: B0067
Audio HAT: Seeed Studio ReSpeaker 2-Mics Pi HAT
- Identity: Seeed Studio ReSpeaker 2-Mics Pi HAT, SKU: 107100001 (Cirrus Logic / Wolfson WM8960 low-power stereo codec, 2 analog microphones, 3.5 mm TRRS audio jack, JST 2.0 speaker terminal)
- Quantity: 1
- Footprint/package: Raspberry Pi HAT form factor (65 mm x 56 mm) with 40-pin female header; connected to Wio Terminal via jumper wires
- Electrical constraints: 3.3 V and 5 V supply rails from host header; I2S digital audio bus + I2C control interface
- Substitution latitude: Must be Seeed Studio ReSpeaker 2-Mics Pi HAT when following curriculum wiring diagrams and audio driver initialization routines.
- Control status: Set-once jumper connection
- Sourcing plan: retail shopping search: Seeed Studio ReSpeaker 2-Mics Pi HAT
Breadboard Jumper Wires
- Identity: Seeed Studio Breadboard Jumper Wire Pack, Seeed SKU: 234
- Quantity: 1 pack (assorted lengths: 241 mm, 200 mm, 160 mm, 117 mm; female-to-female and male-to-female configurations required to wire ReSpeaker HAT to Wio Terminal)
- Footprint/package: Flexible insulated wire with 0.1-inch (2.54 mm) female/male Dupont terminal pins
- Electrical constraints: Low-voltage signal connections (3.3 V / 5 V)
- Substitution latitude: Any standard 24 AWG to 28 AWG Dupont breadboard jumper wires
- Control status: Set-once connection
- Sourcing plan: distributor lookup: 234
Audio Output: Enclosed Speaker or Headphones
- Identity: Seeed Studio Mono Enclosed Speaker - 2W 6 Ohm, Seeed SKU: 2832; or any standard 3.5 mm stereo headphones / active speaker
- Quantity: 1
- Footprint/package: Enclosed rectangular plastic speaker casing with 2-pin JST 2.0 mm connector; or standard 3.5 mm TRS audio plug
- Electrical constraints: Speaker rated at 2 W continuous, 6 Ω impedance (alternatively 4 Ω to 8 Ω, 1 W to 3 W); or standard line-level headphone impedance (16 Ω to 32 Ω)
- Substitution latitude: Any passive miniature speaker with 2-pin JST-PH 2.0 mm connector matching WM8960 output, or any standard 3.5 mm analog headphones
- Control status: Set-once connection
- Sourcing plan: distributor lookup: 2832
MicroSD Card (Wio Terminal Track)
- Identity: microSD Card with capacity ≤ 16 GB, pre-formatted FAT16 or FAT32, plus host PC SD card adapter
- Quantity: 1
- Footprint/package: Standard microSD card form factor
- Electrical constraints: 3.3 V rail. Hard firmware constraint: the Wio Terminal hardware SPI SD controller and bootloader do not support capacities greater than 16 GB; cards > 16 GB fail to mount.
- Substitution latitude: Any standard Class 4 or Class 10 microSD / microSDHC card of capacity 4 GB, 8 GB, or 16 GB
- Control status: Removable storage
- Sourcing plan: retail shopping search: 16GB microSD card FAT32
Raspberry Pi Track Hardware
Single Board Computer: Raspberry Pi 4 Model B
- Identity: Raspberry Pi 4 Model B (Broadcom BCM2711 quad-core Cortex-A72 at 1.5 GHz, 2 GB RAM minimum if running VS Code on device; Raspberry Pi 2B, 3B, or 3B+ permitted if operated remotely/headless)
- Quantity: 1
- Footprint/package: 85 mm x 56 mm single-board computer with 40-pin GPIO header, dual micro-HDMI, dual USB 3.0, dual USB 2.0, Gigabit Ethernet, and CSI camera port
- Electrical constraints: 5.0 V to 5.25 V DC input via USB-C (minimum 3.0 A current capability required); 3.3 V GPIO logic
- Substitution latitude: Raspberry Pi 4 Model B with ≥ 2 GB RAM. Raspberry Pi 2B, 3B, or 3B+ may be substituted only for headless/SSH setups. Non-Raspberry Pi SBCs cannot be substituted due to Grove Base Hat connector compatibility and grove.py library bindings.
- Control status: Computing platform
- Sourcing plan: distributor lookup (representative example — sources give spec only): Raspberry Pi 4 Model B 2GB
MicroSD Card (Raspberry Pi Track)
- Identity: microSD card, 16 GB to 32 GB+ capacity (Class 10 / UHS-I / A1 rated), plus host PC card writer/adapter
- Quantity: 1
- Footprint/package: Standard microSD form factor
- Electrical constraints: 3.3 V supply
- Substitution latitude: Any standard microSD card supported by Raspberry Pi OS
- Control status: Removable storage
- Sourcing plan: retail shopping search: 32GB microSD card Raspberry Pi
Raspberry Pi Power Supply
- Identity: Official Raspberry Pi 15.3 W USB-C Power Supply (or micro-USB power supply for Pi 2B/3B)
- Quantity: 1
- Footprint/package: AC wall adapter with captive cable terminating in USB-C male plug
- Electrical constraints: 5.1 V DC output, minimum 3.0 A output current (minimum 2.5 A for Pi 2/3)
- Substitution latitude: Any regulated 5 V DC to 5.1 V DC power supply meeting minimum 3.0 A on USB-C
- Control status: Set-once power source
- Sourcing plan: retail shopping search: Raspberry Pi 4 USB-C power supply 5.1V 3A
I/O Expansion Hat: Seeed Studio Grove Base Hat for Raspberry Pi
- Identity: Seeed Studio Grove Base Hat for Raspberry Pi, Seeed SKU: 103030275
- Quantity: 1
- Footprint/package: Raspberry Pi HAT form factor with 40-pin pass-through header and 15 onboard Grove 4-pin connectors; includes an onboard STM32 MCU providing an 8-channel 12-bit ADC accessed via I2C
- Electrical constraints: Powered from 3.3 V and 5 V Pi rails; I2C interface on address 0x04
- Substitution latitude: Must be the Seeed Studio Grove Base Hat for Raspberry Pi; the Python grove.py library specifically addresses its onboard STM32 ADC register layout for analog Grove sensor readings.
- Control status: Set-once interface hat
- Sourcing plan: retail shopping search: Seeed Studio Grove Base Hat for Raspberry Pi
Camera Module: Raspberry Pi Camera Module v2
- Identity: Raspberry Pi Camera Module v2 (Sony IMX219 8-megapixel sensor)
- Quantity: 1
- Footprint/package: 25 mm x 24 mm PCB with fixed focus lens and 15-pin 1 mm pitch flat flexible ribbon cable (FFC)
- Electrical constraints: 3.3 V supply powered directly through the Raspberry Pi MIPI-CSI port
- Substitution latitude: Raspberry Pi Camera Module v2 (Sony IMX219). Camera Module v1 (OV5647) can be substituted if legacy camera stack is used, but v2 is the documented baseline.
- Control status: Set-once connection
- Sourcing plan: retail shopping search: Raspberry Pi Camera Module v2
Raspberry Pi Audio Input and Output Peripherals
- Identity: Supported configurations: Option 1: Any standard USB microphone paired with any USB speaker, 3.5 mm analog speaker, or HDMI TV/monitor audio Option 2: Any standard USB headset with integrated microphone Option 3: Seeed Studio ReSpeaker 2-Mics Pi HAT mounted on GPIO header, paired with 3.5 mm headphones or Seeed Mono Enclosed Speaker 2W 6 Ohm (SKU: 2832) Option 4: USB conference speakerphone unit (e.g. eMeet M0 USB speakerphone)
- Quantity: 1 functional audio setup
- Footprint/package: Standard USB-A male plug, 3.5 mm TRS audio plug, or 40-pin GPIO HAT
- Electrical constraints: 5 V USB bus power, 500 mA maximum draw
- Substitution latitude: Any ALSA-compatible USB audio class (UAC) input and output device recognized by Linux without proprietary binary drivers
- Control status: Yes; volume adjustment controls and mute buttons operated by students during speech labs
- Sourcing plan: retail shopping search: USB speakerphone conference microphone
Grove Light Sensor v1.2 (Raspberry Pi Track Specific)
- Identity: Seeed Studio Grove - Light Sensor v1.2 (LS06-S phototransistor)
- Quantity: 1
- Footprint/package: Grove 4-pin module (20 mm x 20 mm)
- Electrical constraints: 3.3 V to 5 V DC VCC; analog output voltage proportional to ambient light illuminance (lux)
- Substitution latitude: Any Grove analog phototransistor / light sensor module compatible with the Grove Base Hat analog input ports
- Control status: Sensor input
- Sourcing plan: retail shopping search: Seeed Studio Grove Light Sensor v1.2
Grove Button (Raspberry Pi Track Specific)
- Identity: Seeed Studio Grove - Button
- Quantity: 1
- Footprint/package: Grove 4-pin module (20 mm x 20 mm) containing momentary tactile switch and pull-down resistor
- Electrical constraints: 3.3 V to 5 V DC VCC; active-high digital output
- Substitution latitude: Any Grove momentary tactile button module or equivalent active-high digital pushbutton breakout
- Control status: Yes; momentary switch pressed by students during lab execution
- Sourcing plan: retail shopping search: Seeed Studio Grove Button
Shared Sensors and Actuators (Used in Both Wio Terminal and Raspberry Pi Tracks)
Grove LED Module Pack
- Identity: Seeed Studio Grove - LED Pack, Seeed SKU: 4364 (includes 2 Grove LED socket boards and red/green/blue/white 5 mm through-hole LEDs)
- Quantity: 2 complete modules
- Footprint/package: Grove 4-pin module (20 mm x 20 mm) featuring a through-hole socket for 5 mm LED and an onboard rotary brightness potentiometer
- Electrical constraints: 3.3 V to 5 V DC VCC; digital active-high logic control
- Substitution latitude: Any Grove digital LED socket module or generic 5 mm LED on a breadboard with a 330 Ω current-limiting resistor
- Control status: Yes; student adjusts the onboard rotary potentiometer to set LED brightness
- Sourcing plan: distributor lookup: 4364
Grove Temperature and Humidity Sensor (DHT11)
- Identity: Seeed Studio Grove - Temperature & Humidity Sensor (DHT11), SKU: 101020011
- Quantity: 1
- Footprint/package: Grove 4-pin module (20 mm x 40 mm) housing a DHT11 sensor and pull-up resistor
- Electrical constraints: 3.3 V to 5 V DC VCC; single-wire proprietary digital serial protocol
- Substitution latitude: Must be a DHT11-based Grove sensor module; code uses DHT11 timing protocols (DHT22 requires driver configuration changes).
- Control status: Sensor input
- Sourcing plan: retail shopping search: Seeed Studio Grove Temperature Humidity Sensor DHT11
Grove Capacitive Moisture Sensor
- Identity: Seeed Studio Grove - Capacitive Moisture Sensor (Corrosion Resistant), SKU: 101020614
- Quantity: 1
- Footprint/package: PCB insertion probe blade with Grove 4-pin connector on handle (96 mm x 20 mm)
- Electrical constraints: 3.3 V to 5 V DC VCC; analog voltage output inversely proportional to soil moisture
- Substitution latitude: Must be a capacitive soil moisture sensor (resistive prong sensors are not acceptable due to electrode corrosion and different analog calibration thresholds).
- Control status: Sensor probe inserted and calibrated by student in soil
- Sourcing plan: retail shopping search: Seeed Studio Grove Capacitive Moisture Sensor
Grove Relay Module
- Identity: Seeed Studio Grove - Relay module, SKU: 103020005
- Quantity: 1
- Footprint/package: Grove 4-pin module (40 mm x 20 mm) containing a 5 V DC relay coil, NPN drive transistor, flyback diode, and 2-pin screw terminal block for output contacts
- Electrical constraints: 5 V DC VCC (or 3.3 V control signal driving onboard transistor); relay contact ratings: up to 250 VAC / 5 A or 30 VDC / 5 A
- Substitution latitude: Any Grove-compatible single-channel electromechanical relay or solid-state relay module capable of switching 5 V to 6 V DC at 1 A
- Control status: Actuator; screw terminals tightened once during assembly
- Sourcing plan: retail shopping search: Seeed Studio Grove Relay
Grove GPS Module (Air530)
- Identity: Seeed Studio Grove - GPS (Air530), Seeed SKU: 4584
- Quantity: 1
- Footprint/package: Grove 4-pin module (40 mm x 20 mm) with integrated ceramic patch antenna and Air530 multi-constellation GNSS positioning chip
- Electrical constraints: 3.3 V to 5 V DC VCC; UART serial interface (9600 baud default, NMEA-0183 output)
- Substitution latitude: Any Grove GPS module that communicates via standard 9600-baud NMEA-0183 UART serial sentences (e.g. Seeed Grove GPS SIM28 or NEO-6M variants)
- Control status: Sensor input
- Sourcing plan: distributor lookup: 4584
Grove Time of Flight Distance Sensor (VL53L0X)
- Identity: Seeed Studio Grove - Time of Flight Distance Sensor (VL53L0X), SKU: 101020532
- Quantity: 1
- Footprint/package: Grove 4-pin module (20 mm x 20 mm) featuring STMicroelectronics VL53L0X laser-ranging ToF sensor
- Electrical constraints: 3.3 V to 5 V DC VCC; I2C interface (address 0x29)
- Substitution latitude: Any STMicroelectronics VL53L0X sensor breakout module; curriculum code requires the VL53L0X I2C register interface.
- Control status: Sensor input
- Sourcing plan: retail shopping search: Seeed Studio Grove Time of Flight Distance Sensor VL53L0X
Optional Automated Plant Watering Hardware
Mini Water Pump (6V DC)
- Identity: Seeed Studio 6V Mini Water Pump, Seeed SKU: 1945
- Quantity: 1
- Footprint/package: Miniature cylindrical DC submersible/inline motor pump with input/output barb nozzles and flying lead wires
- Electrical constraints: Operating voltage 3.5 V to 6.0 V DC; operational current 200 mA to 500 mA
- Substitution latitude: Any 5 V to 6 V DC mini submersible or peristaltic liquid pump capable of being powered via standard 5 V USB rails
- Control status: Actuator
- Sourcing plan: distributor lookup: 1945
USB Terminal Block Breakout Connector
- Identity: Adafruit USB Terminal Block Breakout Connector (Product ID: 3628) or generic USB Type-A Male to 2-pin/4-pin screw terminal breakout
- Quantity: 1
- Footprint/package: USB Type-A male plug with attached screw terminal block
- Electrical constraints: 5 V DC pass-through, current handling up to 2 A
- Substitution latitude: Any USB Type-A breakout board to screw terminals, or a sacrificial cut USB cable with stripped VBUS (red) and GND (black) wires
- Control status: Screw terminals tightened during assembly
- Sourcing plan: distributor lookup: 3628
Flexible Silicone Tubing
- Identity: Flexible food-grade or aquarium silicone tubing, sized to match pump nozzles (typically 4 mm to 6 mm inner diameter)
- Quantity: 1 length (approximately 0.5 m to 1 m)
- Footprint/package: Flexible extruded silicone pipe
- Electrical constraints: Non-electrical
- Substitution latitude: Any flexible vinyl or silicone tubing that snugly fits the 6V water pump inlet/outlet barbs
- Control status: Passive plumbing
- Sourcing plan: retail shopping search: 4mm inner diameter silicone tubing for mini water pump
Hookup Wire (Red and Black)
- Identity: Stranded copper hookup wire, 22 AWG to 26 AWG (red for +5V rail, black for ground)
- Quantity: 2 pieces (approx. 15 cm to 30 cm each)
- Footprint/package: Cut wire leads with stripped ends
- Electrical constraints: Voltage rating ≥ 30 V, current rating ≥ 1 A
- Substitution latitude: Any insulated copper wire of 20 AWG to 26 AWG
- Control status: Passive wiring
- Sourcing plan: retail shopping search: 22 AWG hookup wire red black
Precision Screwdriver
- Identity: Small flat-head (slotted) precision screwdriver (1.5 mm to 2.5 mm tip)
- Quantity: 1
- Footprint/package: Manual hand tool
- Electrical constraints: Non-electrical
- Substitution latitude: Any precision slotted screwdriver fitting the Grove relay and USB terminal screw heads
- Control status: Hand assembly tool
- Sourcing plan: retail shopping search: precision flat head screwdriver 2mm
Virtual Simulation Fallback Hardware and Physical Supplies
Virtual Host System Peripherals
- Identity: Host workstation (PC, Mac, or Linux) equipped with integrated or USB webcam, microphone, and speakers/headphones
- Quantity: 1 host system
- Footprint/package: Workstation computer
- Electrical constraints: Host standard power
- Substitution latitude: Any modern operating system capable of running Python 3 and web browsers
- Control status: User-operated webcam, microphone, and speakers
- Sourcing plan: general web research: Does the educational workstation meet the CounterFit virtual IoT hardware webcam and audio requirements?
Non-Technical Agricultural Lab Supplies
- Identity: Houseplant or pot with soil; assorted fruit or vegetables (for computer vision quality inspection lessons)
- Quantity: 1 potted plant; several pieces of fresh and bruised/damaged fruit
- Footprint/package: Physical agricultural objects
- Electrical constraints: Non-electrical
- Substitution latitude: Any real soil sample and any distinguishable produce
- Control status: Measurement and imaging targets
- Sourcing plan: retail shopping search: small potted houseplant for sensor testing
Software and network dependencies
Embedded Platform: PlatformIO Atmel SAM Platform
- Description: PlatformIO development platform package providing the compiler toolchain and upload utilities for Microchip SAMD microcontrollers.
- Origin: PlatformIO Registry
- Version: not stated
- Where the version came from: unpinned in wio_nightlight_platformio.ini line 2 (specified as platform = atmelsam)
- Manifest location: wio_nightlight_platformio.ini
- Check plan: not checkable: unpinned version
Microcontroller Board Target: seeed_wio_terminal
- Description: PlatformIO board configuration profile and register definitions for the Seeed Wio Terminal ATSAMD51P19A board.
- Origin: PlatformIO Registry / Seeed Studio
- Version: not stated
- Where the version came from: unpinned in wio_nightlight_platformio.ini line 3 (specified as board = seeed_wio_terminal)
- Manifest location: wio_nightlight_platformio.ini
- Check plan: not checkable: unpinned version
Firmware Framework: Arduino Core for SAMD
- Description: Arduino framework implementation for Atmel SAMD21/SAMD51 microcontrollers.
- Origin: PlatformIO / Arduino / Seeed-Studio/ArduinoCore-samd
- Version: not stated
- Where the version came from: unpinned in wio_nightlight_platformio.ini line 4 (specified as framework = arduino)
- Manifest location: wio_nightlight_platformio.ini
- Check plan: not checkable: unpinned version
Python Package: azure-functions
- Description: Python worker interface and bindings for developing serverless Azure Functions.
- Origin: PyPI (https://pypi.org/project/azure-functions/)
- Version: not stated
- Where the version came from: unpinned in soil_moisture_trigger_requirements.txt line 3 (bare package name azure-functions)
- Manifest location: soil_moisture_trigger_requirements.txt
- Check plan: not checkable: unpinned version
Python Package: azure-iot-hub
- Description: Azure IoT Hub Service SDK for managing devices and sending cloud-to-device commands from backend applications.
- Origin: PyPI (https://pypi.org/project/azure-iot-hub/)
- Version: not stated
- Where the version came from: unpinned in soil_moisture_trigger_requirements.txt line 4 (bare package name azure-iot-hub)
- Manifest location: soil_moisture_trigger_requirements.txt
- Check plan: not checkable: unpinned version
Virtual IoT Simulator: CounterFit
- Description: Web-based virtual IoT hardware simulator simulating Grove sensors, LEDs, relays, and cameras locally via Python.
- Origin: https://github.com/CounterFit-IoT/CounterFit
- Version: not stated
- Where the version came from: stated in documentation (hardware.md provides GitHub link with no git tag, commit hash, or release version)
- Manifest location: stated in documentation (hardware.md)
- Check plan: not checkable: unpinned version
Offline Documentation Viewer: Docsify / docsify-cli
- Description: Markdown documentation web site generator running on Node.js.
- Origin: https://docsify.js.org/ via npm
- Version: not stated
- Where the version came from: stated in documentation (README.md specifies running docsify serve with no version constraint)
- Manifest location: stated in documentation (README.md)
- Check plan: not checkable: unpinned version
Local Interactive Quiz Application
- Description: Community-hosted interactive quiz web app for student knowledge testing.
- Origin: https://ff-quizzes.netlify.app/en/ (also available in the local repository quiz-app directory)
- Version: not stated
- Where the version came from: stated in documentation (README.md)
- Manifest location: stated in documentation (README.md)
- Check plan: not checkable: external web service with no version stated
Network Exposure:
- Network Connection Type: Wio Terminal connects via Wi-Fi (2.4 GHz / 5 GHz using Realtek RTL8720DN). Raspberry Pi connects via built-in Wi-Fi or Ethernet (RJ-45).
- Listening Services / Ports:
- Local Docsify web server: listens on port 3000 on localhost (localhost:3000) when run via docsify serve (cited in README.md).
- Raspberry Pi Remote Access: SSH service listening on TCP port 22 is documented for remote/headless access ("If you are going to access the Pi remotely then any Pi 2B and above will work" in hardware.md). Default credentials: not stated in the sources.
- CounterFit Virtual Hardware: Local HTTP/WebSocket server listening on host PC (port not stated in sources).
- Outbound Protocol Connections:
- MQTT Brokers: Devices establish outbound TCP connections to MQTT brokers (unencrypted port 1883 or TLS port 8883) for telemetry streaming and actuator control (cited in README.md lesson table).
- Azure Cloud Services: Devices establish outbound HTTPS (port 443) or AMQPS/MQTT over TLS to Azure IoT Hub, Azure Functions, and cloud cognitive services.
Downloads and External URLs
- Kit and Hardware Sourcing Pages:
- Seeed Studio Wio Terminal Starter Kit: https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Wio-Terminal-Starter-Kit-p-5006.html
- Seeed Studio Raspberry Pi 4 Starter Kit: https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Raspberry-Pi-Starter-Kit-p-5004.html
- Seeed Studio Wio Terminal (Standalone): https://www.seeedstudio.com/Wio-Terminal-p-4509.html
- Arducam Mini 2MP Plus OV2640 SPI: https://www.arducam.com/product/arducam-2mp-spi-camera-b0067-arduino/
- Seeed Studio ReSpeaker 2-Mics Pi HAT: https://www.seeedstudio.com/ReSpeaker-2-Mics-Pi-HAT.html
- Seeed Studio Breadboard Jumper Wires: https://www.seeedstudio.com/Breadboard-Jumper-Wire-Pack-241mm-200mm-160mm-117m-p-234.html
- Seeed Studio Mono Enclosed Speaker 2W 6 Ohm: https://www.seeedstudio.com/Mono-Enclosed-Speaker-2W-6-Ohm-p-2832.html
- Raspberry Pi 4 Model B: https://www.raspberrypi.org/products/raspberry-pi-4-model-b/
- Raspberry Pi Camera Module v2: https://www.raspberrypi.org/products/camera-module-v2/
- Seeed Studio Grove Base Hat for Raspberry Pi: https://www.seeedstudio.com/Grove-Base-Hat-for-Raspberry-Pi.html
- Seeed Studio Grove Light Sensor v1.2: https://www.seeedstudio.com/Grove-Light-Sensor-v1-2-LS06-S-phototransistor.html
- Seeed Studio Grove Button: https://www.seeedstudio.com/Grove-Button.html
- Seeed Studio Grove LED Pack: https://www.seeedstudio.com/Grove-LED-Pack-p-4364.html
- Seeed Studio Grove Temperature and Humidity Sensor (DHT11): https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DHT11.html
- Seeed Studio Grove Capacitive Moisture Sensor: https://www.seeedstudio.com/Grove-Capacitive-Moisture-Sensor-Corrosion-Resistant.html
- Seeed Studio Grove Relay: https://www.seeedstudio.com/Grove-Relay.html
- Seeed Studio Grove GPS (Air530): https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html
- Seeed Studio Grove Time of Flight Distance Sensor (VL53L0X): https://www.seeedstudio.com/Grove-Time-of-Flight-Distance-Sensor-VL53L0X.html
- Seeed Studio 6V Mini Water Pump: https://www.seeedstudio.com/6V-Mini-Water-Pump-p-1945.html
- Adafruit USB Terminal Connector: https://www.adafruit.com/product/3628
- Community and Simulation URLs:
- CounterFit Simulation Framework: https://github.com/CounterFit-IoT/CounterFit
- Online Quiz Web App: https://ff-quizzes.netlify.app/en/
- Microsoft Foundry Discord Community: https://discord.com/invite/ByRwuEEgH4
- Microsoft Foundry Developer Forum: https://aka.ms/foundry/forum
- Docsify Framework: https://docsify.js.org/
Fabrication
No custom PCB fabrication files (such as Gerber files, ODB++ archives, or custom CAD layouts) are present in the design repository. All active development boards, microcontrollers, sensor breakouts, actuator relays, HATs, and camera modules are commercial off-the-shelf (COTS) products manufactured by Seeed Studio, the Raspberry Pi Foundation, Arducam, and Adafruit, connected using standard Grove cables, Dupont jumper wires, or 40-pin GPIO stacking headers. Fabrication of custom printed circuit boards is not required to complete the curriculum.