*A recent Update done --
I first became obsessed with pet tracking after watching a movie where a lost animal is found thanks to a futuristic collar—one of those quiet sci-fi moments that makes advanced technology feel effortless, invisible, and always reliable. In the movie, the tracker just works. No dead batteries. No missing signal. No monthly subscription panic.
Real life, unfortunately, isn’t written by Hollywood.
Most commercial pet trackers today are expensive, drain their batteries in days, and fail precisely when you need them most—when a pet wanders into areas without cellular coverage. Monthly fees, proprietary apps, 24-hour battery life, and “last seen” messages have frustrated pet owners for years. The cinematic promise of a smart, dependable collar simply doesn’t exist yet.
So instead of waiting for the movie version to become real, I decided to build it.
That idea became the Wio Pet Collar Tracker—a movie-inspired, real-world implementation of what pop culture has been promising us for years: a smart pet collar that works anywhere, lasts for weeks, and doesn’t depend on cellular networks.
From sci-fi trope to real hardware
The Wio Pet Collar Tracker is built on the Wio Tracker L1 E-ink platform, powered by the Nordic nRF52840 microcontroller with LoRa mesh networking. Instead of relying on cell towers, the collar communicates through a decentralized mesh network—much closer to the resilient, futuristic systems we see in films and TV shows.
The 2.13-inch E-ink display plays a key role in bringing this pop-culture concept to life. Like the smart collars seen in movies, it shows persistent information at a glance—pet ID, owner contact details, QR codes, battery status, and alerts—while consuming zero power for static content. This allows the device to run for weeks on a single charge, something commercial trackers still struggle to achieve.
This isn’t a high-bandwidth gadget meant for streaming or constant updates. It’s purpose-built for what matters:
- Tracking a pet’s location
- Monitoring activity and environment
- Identifying the pet instantly if found
- Working even when there’s no cellular signal
In other words: the fictional tracker, made practical.
To replace cinematic “always-on” connectivity, I used Meshtastic, an open LoRa mesh networking platform. The Meshtastic mobile app (Android and iOS) allows live monitoring, configuration, encryption, and alerts—turning a phone into the command center you’d expect from a sci-fi control room.
During testing, the collar immediately connected to nearby mesh nodes, extending its communication range far beyond what a single device could achieve. Location messages were received several kilometers away, even in suburban environments with buildings blocking line-of-sight. The result was a resilient, infrastructure-free network that feels far more futuristic than traditional GPS-plus-SIM trackers.
Pop culture rarely stops at “just GPS,” so neither did this project.
Using Grove and PTH connections, I integrated:
- Motion sensing (MPU-6050) for activity and abnormal movement detection
- Temperature sensing (LM35) for environmental safety monitoring
- Audio detection to identify barking patterns or distress sounds
The system performs real-time sensor fusion on the nRF52840, adjusting sampling rates based on battery level. When something unusual happens—overheating, excessive movement, distress sounds—the collar updates its E-ink display and broadcasts alerts through the mesh network.
This transforms the collar from a tracker into something closer to a character—a silent guardian, constantly aware of what’s happening to the pet wearing it.
One of the most “movie-accurate” features is the digital pet ID. Instead of metal tags that fall off or become unreadable, the E-ink display shows permanent identification details and a QR code linking to an online profile. Because E-ink consumes no power when static, this information remains visible for weeks without affecting battery life.
If someone finds the pet, they don’t need a special app—just a phone camera.
It’s a simple feature, but it turns a sci-fi concept into something immediately useful in the real world.
Testing showed results that matched the original vision:
- GPS accuracy within 2.5 meters
- Mesh communication across several kilometers
- 12–15 days of battery life on a 1000mAh LiPo
- Reliable detection of movement, temperature, and sound events
- Excellent E-ink visibility in all lighting conditions
The integrated battery management system enables USB-C charging, accurate capacity reporting, and predictive low-battery alerts—eliminating the anxiety that plagues existing pet trackers.
The most innovative feature is the E-ink display functioning as a digital pet ID system. Unlike traditional metal tags that can fall off or become illegible, the E-ink screen displays essential pet information, owner contact details, and QR codes linking to comprehensive online profiles. The display consumes zero power when showing static information, enabling this critical identification function to remain visible for weeks without affecting the 1000mAh battery life.
For the demonstration system, I programmed the Wio Tracker to display pet identification information, generate QR codes for online pet profiles, and show real-time status including GPS coordinates, battery level, and sensor alerts. The integrated BMS provides accurate battery monitoring and safe charging through the USB-C port. The display updates only when information changes, minimizing power consumption while ensuring current information is always visible.
The mobile application integration leverages the existing Meshtastic ecosystem, providing immediate access to location tracking, sensor data visualization, and alert management through the established Android and iOS applications. The integrated battery management system reports accurate charge levels and power consumption data directly to the mobile app. Custom features can be added through the Meshtastic API to provide pet-specific monitoring and notification capabilities.
I connected the sensor module to the Wio Tracker's Grove connector and configured the firmware to sample motion, temperature, and audio data at regular intervals. The system processes sensor data to detect activity patterns, environmental hazards, and potential emergencies. The built-in BMS monitors power consumption and adjusts sensor sampling rates based on remaining battery capacity. When significant events are detected, the system updates the E-ink display with current status information and transmits alert messages through the mesh network.
Testing the complete system revealed impressive capabilities: GPS accuracy within 2.5 meters, mesh communication ranges of several kilometers in optimal conditions, 12-15 days of battery life with the 1000mAh LiPo under typical usage patterns, and reliable sensor detection of activity, temperature, and sound events. The integrated BMS provided precise battery monitoring and safe charging, while the E-ink display maintained excellent visibility in all lighting conditions while contributing virtually nothing to power consumption.
The compact 1000mAh LiPo battery and integrated BMS system provide several advantages over external battery solutions: smaller form factor for pet collar applications, integrated charging protection and monitoring, USB-C charging convenience, and optimized power management specifically designed for the nRF52840 and LoRa radio combination. The BMS accurately reports remaining capacity and enables predictive charging reminders through the mobile application.
Why this fits Pop Culture CreationPop culture often shows us technology that feels magical because it’s reliable, invisible, and humane. The Wio Pet Collar Tracker is my attempt to take one of those familiar movie moments and make it real—using open hardware, mesh networking, and thoughtful power design.
It’s not just inspired by pop culture—it’s a response to it.
A way of saying: this shouldn’t stay fictional.
#include <Wire.h>
#include <SPI.h>
#include <LoRa.h>
#include <Meshtastic.h>
#include <Adafruit_GFX.h>
#include <Adafruit_EPD.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_LM75A.h> // Or LM35 analog mapping
#include <ArduinoJson.h>
// Pin assignments
#define EINK_CS 5
#define EINK_DC 17
#define EINK_RST 16
#define EINK_BUSY 4
#define MIC_PIN A0
// Create display instance
Adafruit_IL0373 display(128, 250, EINK_CS, EINK_DC, EINK_RST, EINK_BUSY);
// Sensor instances
Adafruit_MPU6050 mpu;
Adafruit_LM75A tempSensor; // I2C temperature sensor
// Timing
const uint32_t SENSOR_INTERVAL_ACTIVE = 5000; // ms
const uint32_t SENSOR_INTERVAL_IDLE = 60000; // ms
uint32_t lastSensorMillis = 0;
// Mesh messaging
MeshtasticClass mesh;
// Global state
float currentTemp;
float currentActivity;
int currentMic;
bool isMoving = false;
bool displayDirty = true;
// Pet info
const char* petName = "BUDDY";
const char* petBreed = "Golden Retriever";
const char* ownerPhone = "555-0123";
void setup() {
Serial.begin(115200);
Wire.begin();
// Initialize sensors
if (!mpu.begin()) {
Serial.println("MPU6050 init failed");
}
if (!tempSensor.begin()) {
Serial.println("Temp sensor init failed");
}
// Initialize display
display.begin();
display.setRotation(1);
display.setTextColor(EPD_BLACK);
display.setFont(&FreeSansBold9pt7b);
// Initialize Meshtastic mesh
mesh.begin();
mesh.setNodeName(petName);
// Initial display
drawDisplay();
}
void loop() {
mesh.loop(); // handle mesh packets
uint32_t now = millis();
uint32_t interval = isMoving ? SENSOR_INTERVAL_ACTIVE : SENSOR_INTERVAL_IDLE;
if (now - lastSensorMillis >= interval) {
readSensors();
sendTelemetry();
drawDisplay();
lastSensorMillis = now;
}
}
// Read temperature, motion, and mic
void readSensors() {
// Temperature
currentTemp = tempSensor.readTempC();
// Motion (activity magnitude)
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
currentActivity = sqrt(a.acceleration.x*a.acceleration.x +
a.acceleration.y*a.acceleration.y +
a.acceleration.z*a.acceleration.z);
isMoving = (currentActivity > 0.5);
// Microphone (sound level)
currentMic = analogRead(MIC_PIN);
displayDirty = true;
}
// Send telemetry over Meshtastic mesh
void sendTelemetry() {
// Build JSON payload
StaticJsonDocument<200> doc;
doc["temp"] = currentTemp;
doc["activity"] = currentActivity;
doc["sound"] = currentMic;
String msg;
serializeJson(doc, msg);
mesh.sendText(msg);
}
// Update E-ink display if needed
void drawDisplay() {
if (!displayDirty) return;
display.clearBuffer();
display.setCursor(0, 20);
display.print(petName);
display.setCursor(0, 40);
display.print(petBreed);
display.setCursor(0, 60);
display.print("Call: "); display.print(ownerPhone);
// Display telemetry
display.setCursor(0, 80);
display.print("T: "); display.print(currentTemp, 1); display.println(" C");
display.print("A: "); display.print(currentActivity, 1); display.println(" m/s2");
display.print("S: "); display.print(currentMic); display.println(" levels");
// Battery icon – handled by BMS integration (pseudocode)
int battPct = mesh.getBatteryPercent();
display.setCursor(80, 20);
display.printf("%d%%", battPct);
// QR code – demonstrate placeholder
// renderQRCode("https://petprofile.com/buddy123", 50, 100);
display.display();
displayDirty = false;
}














_t9PF3orMPd.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)






_3u05Tpwasz.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)

Comments