基于 Wi-Fi 的资产跟踪器
使用物联网在 WiFi 覆盖区域内追踪您的资产。
引言
在一个大型仓库中追踪和定位移动资产始终是一个巨大的挑战。想象一个大型仓库,其中有许多移动车辆、机械等。您如何从中央指挥中心定位它们?唯一的解决方案是让资产告知您其位置。在本文中,我们将开发一种基于 WiFi 标签的解决方案,可以将其附加到任何资产。该标签将在特定时间间隔内与您的服务器通信,并告知其位置。
该标签使用 ESP8266-12 (ESP-12) WiFi 芯片开发。
背景
市场上有很多使用 WiFi 标签追踪您资产的解决方案(例如 AirISTA, STANLEY HealthCare 等)。本文将向您解释这项技术背后的原理,并帮助您以经济高效的方式开发自己的解决方案。
对于开发和实施,您将需要以下软件和硬件。
- Arduino IDE ( 链接)
- USB 转 TTL 转换器 (链接)
- ESP8266-12 (链接)。ESP8266 是一款低成本 Wi-Fi 芯片,具有完整的 TCP/IP 协议栈和微控制器功能,由位于上海的中国制造商乐鑫科技生产。
- 跳线
- 2 节 AA 电池盒
- 在 https://thingspeak.com/ 上创建一个帐户,用于公开您的标签将使用的 Web 服务。
使用代码
首先需要做的是设置用于编程 ESP8266 芯片的开发环境。 详细帮助可以在此 链接 中找到。
设置好环境后,我们需要将 ESP 芯片连接到 USB-TTL 连接器。 详细信息可在此 链接 中找到。
掌握 AT 命令的基本知识将帮助您更好地了解芯片 (链接)。
现在,一切都已准备好将您的程序上传到芯片。 在上传之前,我将向您解释此解决方案的工作原理。
如您所知,WiFi 信号是使用接入点 (AP) 生成的,每个 AP 都有一个唯一的 MAC 地址。 安装在 ESP 芯片中的程序将通过 AP 连接到 wifi 并读取连接的 AP 的 MAC 地址并设置到服务器。 假设此芯片连接到 WiFi 覆盖区域中的资产,其中部署了多个 AP。 该芯片将以预定义的时间间隔连接到 wifi 并读取 MAC 地址并发送到您的服务器。 通常,AP 会有一个定义的范围区域,因此您可以根据您获得的最后一个 MAC 地址找到资产的大概位置。
我们需要考虑一些挑战。 在 WiFi 覆盖区域中,大多数位置都将位于多个 AP 的覆盖范围内。 在这里,您需要考虑 WiFi 的另一个参数,称为 RSSI,意思是接收信号强度指示。 RSSI 值将为 -ve 刻度,其中 0 表示最大信号强度。 使用此,您可以找到距离 WiFi 标签最近的 AP,并且有关其他 AP 的信息将帮助您缩小资产的位置范围。 还有一种技术称为 WiFi 三角测量,这意味着如果您可以在任何特定位置找到来自 3 个或更多 AP 的信号,则可以精确定位您的标签。 WiFi 三角测量需要复杂的算法,这超出了本文的范围。
另一个挑战是标签的持续供电。 WiFi 连接会消耗您的电池电量。 使用 2 节 AA 电池,您只能管理 2 或 3 天。 我在此解决方案中包含另一个概念,称为“深度睡眠”,它将使标签在未连接时进入深度睡眠模式,并在特定时间间隔内唤醒并将位置详细信息发送到服务器。 有了这个,我们可以将电池寿命延长到 6 个月!!!。 通过将万用表串联到解决方案中,可以找到确切的功耗。
详细的源代码已附加到本文中。 我将在下面介绍代码中的重要模块。
// This function will help you to get the base station id of the connected AP
String GetBSSIDAddress() {
String bssidstr = WiFi.BSSIDstr();
return bssidstr;
}
// scanNetworks function will give the list of APs with the associated wifi.
// Iterating though the list will give you the nearest AP in the given wifi.
byte available_networks = WiFi.scanNetworks();
int rssi = -200;
String apMAC = "Couldnot find";
for (int network = 0; network < available_networks; network++) {
if (strcmp((WiFi.SSID(network)).c_str(), ssid) == 0)
{
if (WiFi.RSSI(network) > rssi)
{
rssi = WiFi.RSSI(network);
apMAC = WiFi.BSSIDstr(network);
}
}
}
// Connect to the wifi using ssid name and password.
WiFi.begin(ssid, password);
关注点
这是一个用于 WiFi 跟踪的基本解决方案,您可以对此进行改进,以提高准确性和寿命。
历史
第一个版本。