您当前的位置:首页 > 养生 > 内容

gps追踪器怎么使用,DIY一个GPS儿童追踪器

gps追踪器怎么使用,DIY一个GPS儿童追踪器

我做了一个GPS追踪器来追踪我的孩子。放学后,我可以让他们随时发送接机请求,这样我就可以准备好接他们放学。

背景

我的双胞胎喜欢在小路上骑自行车,他们的年龄比我骑得快得多。作为家长,我想鼓励他们自己探索,但我也想密切关注他们的位置,以防出事。

我的孩子不我对手机了解不够,所以我尽量避免重复两个数据计划。虽然许多商业儿童美国GPS追踪器在市场上可以买到,几乎所有的追踪器都需要支付额外的月费。

以上种种让我想到了——。作为一名软件开发人员,我应该能够为自己构建这样的东西。

于是这个项目诞生了!

我的定制跟踪器每五分钟读取一次GPS读数,并在地图上显示出来。此外,追踪器还包括一个按钮,孩子们可以按下这个按钮,通过短信将他们的位置发送给父母。

在这篇文章中,我将向你展示如何建立我自己的自定义GPS跟踪器,并教你如何复制这个设置的一部分。让让我们开始吧。

步骤1:组装硬件

我使用的大部分硬件来自Swan 蓝调无线羽毛初学者工具包。羽毛初学者工具包包括一个笔记卡,一个笔记载体AF和一个Swan MCU。让让我们逐一分析。

留言卡

Notecard是一个小型系统级模块,可以为几乎任何物联网项目添加连接。Blues生产蜂窝和Wi-Fi笔记卡,但对于GPS跟踪,你需要使用蜂窝笔记卡。

我使用Notecard从外部天线(我将立即展示)收集GPS坐标,并通过蜂窝连接将这些坐标发送到云端。

NoteAF

Notecarriers是一个支持板,可以很容易地用来原型化和部署物联网项目。Notecarrier为您提供了一个方便的地方来连接您的Notecard,给它供电,访问嵌入式天线,并通过Qwiic端口连接到I2C外围设备。

Notecarrier AF还包含羽毛兼容连接器,可以轻松嵌入任何羽毛兼容设备,与Notecard配合使用。

天鹅

Notecarrier可以轻松连接兼容Feather的MCU,我用的MCU是Swan。Swan几乎可以驱动任何物联网项目,因为它拥有640KB RAM的大容量,可以扩展到55个引脚,以访问额外的I/O和总线,并内置对C/C、Arduino和CircuitPython的支持。

放在一起

要组装这个版本,您需要将Notecard和Swan都插入Notecarrier AF。蓝调有很好的图片指南。如果你是第一次设置,我建议你按照这些图片。

组装部件后,您将得到如下所示的设置。

为了完成构建,我添加了最后两个东西。首先,我在Notecarrier AF的插座上添加了一个外部Molex天线。虽然Notecarrier AF内置天线,但是外置天线可以更快地接收GPS信号,这对于我这个项目来说很重要。

接下来,我添加了一个小的Lipo电池,并将其电池连接到Notecarrier AF上的JST连接器。当我在办公室外使用它时,锂电池为设备供电。

这是安装天线和电池后的设置:

注:注carrier-AF包括一个微型USB端口。如果给这个端口供电,就可以给连接的锂电池充电。

最后,因为我没有我不想让孩子们使用时有一堆松散的碎片飞来飞去,我将锂电池贴在Notecarrier AF的背面,还将Molex天线的粘性面贴在背面(中间有一点纸板)。

从长远来看,我想为设备制作一个漂亮的外壳,但对于原型设计,这给了我一个孩子可以随身携带的物品。

现在你已经看到了硬件的样子,让让我们看看如何设置云后端。

步骤2:设置云后端

Notecard的一个很大的优势是,它知道如何将数据发送到云后端的Notehub,开箱即用。Notehub是一个托管服务,旨在连接到Notecard设备并同步数据。

如果你跟随并且想要自己构建这个项目,你需要在notehub.io上设置一个账号,然后创建一个新的项目。

创建项目后,确保复制新项目的ProductUID(参见下面的屏幕截图),因为您需要这个标识符将Notecard连接到新的Notehub项目。

第三步:写代码。如果你还记得第一步,我使用Swan MCU来执行驱动儿童跟踪器的代码。Swan支持CircuitPython和Arduino,所以你可以使用任何一个,但我选择Arduino是因为它是我之前在Swan上多次使用的平台。

如果您是Swan新手,您需要先阅读Swan快速入门,这将帮助您设置您的开发环境。如果您想使用与我相同的环境,请完成使用Arduino IDE部分。

设置开发环境后,您可以继续编写代码本身。在代码中,您需要处理三件主要的事情:

配置便笺

配置获取GPS读数的频率

按下处理按钮

让让我们依次解决这些问题。

注意:这个项目的完整源代码可以在下面找到。

配置便笺

我们的第一个编码任务是建立Notecard。便笺的API是基于JSON的,所以配置Notecard就像发送几个JSON请求一样简单。

你可以通过在线游乐场、Arduino的CLI或SDK、Python、C/C或Go发送这些请求。在这种情况下,我们运行在Swan MCU上,因此我们将使用note-arduino,这是通过arduino兼容的微控制器与Notecard通信的官方库。

具体来说,您需要确保使用项目的安装说明在Arduino IDE中安装库。注意-arduino

之后,需要从Arduino sketch中的以下代码开始:

#包括

#定义serialDebug Serial #定义productUID com . blues . TJ:kid tracker

便签卡;

void setup(){ serial debug . begin(115200);

note card . begin();note card . setdebugoutputstream(serial debug);j * req 1=note card . new request(hub.set );JAddStringToObject(请求1,产品product uid);JAddStringToObject(请求1,模式 '周期性);JAddNumberToObject(请求1,出站 5);note card . send request(req 1);

serial debug . println(安装完成);}

注意:如果继续,请确保更改com . blues . TJ:kid tracker 添加到您在上一步中复制的ProductUID。

首先,它初始化Notecard (notecard.begin())并设置调试输出流(note card . set debug output stream(serial debug)),这允许您使用Arduino IDE的串行监视器查看日志。

接下来,代码使用note-arduino库格式化新的hub.set命令,并将其发送到Notecard。

j * req 1=note card . new request(hub.set );JAddStringToObject(请求1,产品product uid);JAddStringToObject(请求1,模式 '周期性);JAddNumberToObject(请求1,出站 5);note card . send request(req 1);

这个hub.set命令控制要将数据发送到哪个Notehub项目,并允许您为Notecard的工作方式设置一些基本配置。

设置模式去周期性告知记事本定期连接到蜂窝网络,并将出站以告诉记事本每五分钟尝试连接一次。Notecard也可以在连续模式下工作(模式 '连续),但保持蜂窝调制解调器连接不变会消耗大量电池。

每五分钟发一次数据已经是相当耗电了,但是对于这个项目来说,我希望孩子在骑自行车的时候能经常看到数据,并且在两次使用之间给设备的锂电池充电没有问题。如果您的项目需要更保守的电池使用,您需要设置这个出站值转换成一个相当大的数字。

此时,您可以将您的程序发送到Swan进行测试。如果一切顺利,您应该会在Arduino串行监视器中看到以下内容:

注意:如果你不I don’我看不到日志,你可以在一会儿找到它。SerialDebug),强制程序等待调试器可用后再继续。请确保在(!idspnonenote)运行期间。SerialDebug)准备部署设备的时候记得删除它,因为如果在没有串口调试器的情况下运行它,会导致无限循环。

如果您返回到您的Notehub项目,您现在应该看到您的设备被列出:

此时,您的Notecard已连接到Notehub,这意味着您已准备好发送位置数据。接下来,让让我们看看如何配置Notecard来收集位置信息。

配置获取GPS读数的频率

Notecard有许多要求,允许您配置如何获得GPS读数。您需要向便笺发送两个主要命令:card.location.mode和card.location.track。

以下代码(可以添加到现有的hub.set代码下)发出这两个请求。

j * req 2=note card . new request(card . location . mode );JAddStringToObject(req2,模式 '周期性);JAddNumberToObject(req2,秒 300);note card . send request(req 2);

j * req 3=note card . new request(card . location . track );JAddBoolToObject(请求3,开始真);JAddBoolToObject(请求3,心跳真);JAddNumberToObject(请求3,小时 12);note card . send request(req 3);

在card.location.mode呼叫中,设置模式去周期性告诉Notecard定期(而不是连续)激活其GPS模块,并设置秒o300告诉Notecard每300秒或5分钟读取一次GPS读数。

card.location.track请求启动实际的跟踪过程。在周期性GPS模式下,Notecard足够智能,只有在设备移动时才能获得GPS读数(它使用内置的加速度计知道这一点)。将heartbeat选项设置为true会告知每12小时读取一次便笺(因为我们将小时到12),即使便条卡没有不要动。

简而言之,这些请求告诉Notecard开始获取GPS读数;如果设备在移动,每五分钟读一次;如果没有,每十二小时读一遍。

注意:如果您想了解更多关于如何将Notecard配置为资产追踪器的信息,请务必阅读Notecard 的资产跟踪综合指南。如果您将这个程序发送到Swan,您应该在串行监视器中看到以下输出:

更重要的是,如果你检查事件选项卡,您应该开始看到由_ track.qo输入的文件。

如果双击一个事件并转到下一页的JSON选项卡,您可以查看捕获的GPS信息。

可能需要几分钟才能看到您的第一个活动,因为便笺需要一些时间来建立GPS连接。尽量把设备放在视野开阔的位置,尽可能避开地下室等狭窄的地方。

此外,请记住Notecard只有在设备移动时才会获得新的GPS读数,因此在_track.qo可以在测试期间看到后续文件进来之前,您可能需要稍微晃动一下设备。

我们稍后我将看看如何在地图上显示您的GPS读数,但是让让我们先结束这个项目的代码,看看如何让按下一个按钮发送一条带有位置的SMS消息。

通知按钮

我希望我的跟踪器有一个按钮,孩子们可以按下它,并向父母发送一条短信,告诉他们跟踪器的当前位置。这是大多数商业儿童追踪器的特点,所以我相信这也是其他父母想要的。

在物联网应用中,有许多方法来处理按钮按压,但Swan包含一个用户按钮(USER_BTN)来处理这种确切的场景。

要使用此按钮,您可以#define先在草图的顶部添加下面一行。

#define BUTTON_PIN USER_BTN接下来,添加以下布尔值,您将使用它来跟踪用户是否请求了他们的位置。

bool locationRequested=false之后,将以下代码添加到现有setup()函数的末尾。这段代码将一个中断附加到Swan按钮上,并在它被触发时调用名称ISR。

pinMode(BUTTON_PIN,INPUT _ pull up);附加中断(digitalpinpointerum(BUTTON _ PIN),ISR,下降);您需要定义ISR(中断服务例程),您可以通过将以下函数添加到您的草图来完成。

void ISR(void){串行调试。println(按钮已按下');locationRequested=true}位置请求当用户按下天鹅的用户按钮时,您的程序现在会更改布尔值。要响应该更改,您需要在Arduinoloop()函数中监视该布尔值。您可以使用下面的代码来做到这一点。

void loop() { if(!请求的位置){ return}

j * req=便笺。新请求(卡。位置);j * resp=便笺。请求安德烈响应(req);串行调试。println(地点:);double lat=JGetNumber(resp,lat );double lon=JGetNumber(resp,lon );serialDebug.println(lat,10);serialDebug.println(lon,10);

if(lat==0){串行调试。println(卡片还没有位置');//请稍等片刻,然后重试。延时(1000 * 60);返回;}

//http://maps.google.com/maps?q=,字符缓冲区[100];snprintf( buffer,sizeof(buffer),您的孩子在请求您。https://maps.google.com/maps?q=%.8lf,% .8lf ,拉特隆);serialDebug.println(缓冲区);

j * req 2=便笺。新请求(注意。补充);JAddStringToObject(req2,文件'特维利奥。qo );JAddBoolToObject(req2,同步真);j * body=JCreateObject();JAddStringToObject(正文,'消息'缓冲区);JAddItemToObject(req2,正文正文);便签卡。发送请求(请求2);

location requested=false serial debug . println(位置发送成功。');}这里有很多,所以让我们分解这段代码。首先,请注意这里的所有逻辑都由如果(!请求的位置){ return}检查门控。也就是,如果用户没有按下按钮,在循环()。

如果用户请求了一个位置,我们接下来使用留言卡的卡片。位置请求来获取当前位置并将其打印出来。

j * req=便笺。新请求(卡。位置);j * resp=便笺。请求安德烈响应(req);串行调试。println(地点:);double lat=JGetNumber(resp,lat );double lon=JGetNumber(resp,lon );serialDebug.println(lat,10);serialDebug.println(lon,10);留言卡可能还没有位置(项目启动时需要几分钟才能获取全球(卫星)定位系统位置),因此我们接下来检查是否卡片。位置返回了有效位置。如果没有,我们会记录另一条消息,并等待一分钟后再重试。

if(lat==0){串行调试。println(卡片还没有位置');//请稍等片刻,然后重试。延时(1000 * 60);返回;}如果我们确实有一个有效的位置,我们接下来会格式化一条消息,其中包含指向跟踪器当前位置的谷歌地图链接。

茶缓冲器[100];snprintf( buffer,sizeof(buffer),您的孩子在请求您。https://maps.google.com/maps?q=%.8lf,% .8lf ,拉特隆);serialDebug.println(缓冲区);之后,我们使用留言卡的注释。添加请求将消息发送到Notehub。

j * req 2=便笺。新请求(注意。补充);JAddStringToObject(req2,文件'特维利奥。qo );JAddBoolToObject(req2,同步真);j * body=JCreateObject();JAddStringToObject(正文,'消息'缓冲区);JAddItemToObject(req2,正文正文);便签卡。发送请求(请求2);最后,我们将布尔值翻转回假的,因为我们现在已经完成了按钮按下的处理。

location requested=false serial debug . println(位置发送成功。');这样,您就完成了编写运行该项目所需的代码!在最后一次将代码推送到设备之前,进入Arduino IDE的工具菜单,并将C运行时库切换到支持浮点打印和扫描的库,因为我们在放置纬度和经度的逻辑中使用它进入谷歌地图网址。

标签:项目NotecardGPS


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 绿茶种类里,什么茶好喝(绿茶有哪些品种 哪种绿茶更耐泡)

下一篇: 富硒茶批发-富硒白茶销售



猜你感兴趣

推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号