wayz_iotkit

1、介绍

wayz_iotkit 是上海图趣信息科技有限公司,针对RT-thread开发的能够实现定位功能的物联网组件。在使用传统上定位,如 GPS 等信号的同时,也支持使用基站、Wifi等数据,通过 WAYZ 定位云来进行定位。当前版本已实现支持wifi、gnss、基站定位,其中wifi定位为自动获取定位数据,gnss和基站需要开发者手动填写相关信息,后期会逐步实现对其他信号源的自动采集,进一步提升定位效果。

1.1 目录结构

名称 说明
docs 文档目录
examples 例子目录,并有相应的一些说明
inc 头文件目录
src 源代码目录

1.2 许可证

wayz_iotkit package 遵循 LGPLv2.1 许可,详见 LICENSE 文件。

1.3 依赖

  • RT-Thread 3.0+
  • RT-Thread 开发 WLAN 框架
  • webclient软件包
  • cJSON软件包

2、如何打开 wayz_iotkit

使用 wayz_iotkit package 需要在 RT-Thread 的包管理器中选择它,具体路径如下:

RT-Thread online packagesIOT - internet of things --->[*] wayz_iotkit: wayz iot location(wayz123) wifi ssid(wayz1234) wifi passwordVersion (v1.0.0)   --->
  • 然后让 RT-Thread 的包管理器自动更新,或者使用 pkgs --update 命令更新包到 BSP 中。

3、使用 wayz_iotkit

  • 如何从零开始使用,请参考 用户手册
  • 完整的 API 文档,请参考 API 手册
  • 详细的示例介绍,请参考 示例文档

4、注意事项

  • 该组件是基于wlan框架上运用的wifi定位,前提条件必须要有wifi芯片
  • 利用该组件时,需要重新开启任务处理,防止内存过小引发堆栈溢出错误

使用指南

这里主要介绍 wayz_iotkit 程序的基本使用流程,并针对使用过程中经常涉及到的结构体和重要 API 进行简要说明。

wayz_iotkit 的基本工作流程如下所示:

  • 初始化 wifi、设备相关信息
  • 将设备注册到平台上
  • 获取定位结果(gcj02和wgs84标准)以及POI信息

menuconfig 配置说明

获取 wayz_iotkit 软件包或者修改用户配置都需要使用 menuconfig。需要用户打开 ENV 工具,并将目录切换到您所用的 BSP 目录,使用 menuconfig 命令打开配置界面。

RT-Thread online packages → IOT - internet of things 中选择 wayz_iotkit 软件包,操作界面如下图所示:

详细的配置介绍如下所示:

RT-Thread online packagesIOT - internet of things --->[*] wayz_iotkit: wayz iot location   # 打开 wayz_iotkit 软件包(wayz123) wifi ssid              # wifi 名字(wayz1234) wifi password         # wifi 密码Version (latest)   --->          # 选择软件包版本,默认为最新版本

选择合适的配置项后,使用 pkgs --update 命令下载软件包并更新用户配置。

  • 注:wifi 名字和密码 供软件包切换模式用

工作原理

设备中wifi模块获取周围环境中的wifi信息,组包通过http方式上传到WAYZ定位云平台,云平台进行分析后将经纬度等其他信息一并返回到软件包,软件包通过处理可以得到gcj02和wgs84标准的经纬度,和POI信息。也可以通过传入gnss、基站等相关数据获取定位结果及其POI信息

wifi、设备相关初始化

typedef struct _device_info_            // 设备信息
{char *dev_name;                     // 设备名称char *manufacturer;                 // 设备制造厂家char *SN;                           // 设备序列号char *product;                      // 设备所属产品char *tenant;                       // 设备所属租户,通常是开放平台的用户 ID
}tdeviec_info;typedef struct _wifi_info_              // wifi 相关信息
{char *ssid;                         // 保存wifi名称char *passwd;                       // 保存wifi密码
}twifi_info;

twifi_info 用于保存建立连接的 wifi相关信息,在设备上传周围wifi信息时联网使用。用户在使用 WiFi 建立连接会话前,必须定义一个存储会话内容的结构体,如下所示:

twifi_info *wlan_info;
wlan_info = wifi_param_init(WIFI_SSID, WIFI_PWD);

tdeviec_info 用于保存注册到平台设备信息,在设备注册使用。用户在使用连接会话前,必须定义一个存储会话内容的结构体,如下所示:

tdeviec_info *dev_info;
dev_info = dev_para_init(DEV_NAME, VENDER, PRODUCT, SN, TENANT);

设备注册

应用程序使用dev_register_init函数注册设备到平台。其中ACCESS_KEY需要在平台申请

示例代码如下所示:

ret = dev_register_init(wlan_info, dev_info, ACCESS_KEY);
if (ret != DEV_REGISTER_OK)
{rt_kprintf("\033[31;22mdevice register failure. \033[0m\n");return ;
}

填充GNSS、基站信息定位

typedef struct _gnss_unit_
{uint64_t timestamp;         // 数据收集的时间戳(UTC 时间,单位:毫秒)double lng;                 // 经度double lat;                 // 纬度 float accuracy;             // 卫星定位水平精度,单位:米
}tgnss_unit;typedef struct _cell_unit_
{uint64_t timestamp;         // 数据收集的时间戳(UTC 时间,单位:毫秒)uint32_t cell_id;           // 小区 ID,当 CDMA 时,为 BID(Base Station ID)char radio_type[7];         // 基站类型,只能是以下值:gsm, wcdma, lte, cdmauint32_t mcc;               // mobileCountryCode:MCC 码uint32_t mnc;               // mobileNetworkCode:当 CDMA 时,为 SID(System ID)码uint32_t lac;               // locationAreaCode:当 CDMA 时,为 NID(Network ID);当 LTE 时,为 TAC(Tracking Area code)
}tcell_unit;

通过填充GNSS、基站等数据,传入定位接口即可获取定位结果信息

获取定位结果

应用程序使用get_position_info函数从平台端获取位置信息。其中ACCESS_KEY需要在平台上申请
location_print函数是打印位置相关信息

示例代码如下所示:

tlocation_info location = {0};
ret = get_position_info(wlan_info, ACCESS_KEY, RT_NULL, &location);
if (RT_ERROR == ret)
{rt_kprintf("\033[31;22mthe device failed to obtain latitude and longitude information.\033[0m\n");
}
else
{location_print(location);
}
  • 其中get_position_info函数第三个参数为填充的GNSS和基站数据,相关操作可以参照示例文档

打印位置信息结果

-------------------location result-------------------------------
timestamp: 1606293694990
gcj02:latitude:30.515105longitude:114.401555
wgs84:latitude:30.517407914397longitude:114.396014616712
POI: {"id": "7SkEZdfXQfS","type": "Residential","name": "中建东湖明珠国际公馆","categories":[{"id": 10200,"name": "住宅"}]}
-------------------location result end---------------------------

定位轮询频次

该引用可以通过循环的模式来设置定位频次,其中POINT_FRQ为定位频次的设置

示例代码如下所示:

while (1)
{ret = get_position_info(wlan_info, ACCESS_KEY, RT_NULL, &location); if (RT_ERROR == ret){rt_kprintf("\033[31;22mthe device failed to obtain latitude and longitude information.\033[0m\n");}else{location_print(location);}rt_thread_mdelay(POINT_FRQ);rt_memset(&location, 0, sizeof (location));
}

wayz_iotkit API

/*** Wifi parameter initialized* * @param ssid: Wifi name* * @param passwd: Wifi password* * @return twifi_info: Dynamic allocation wifi info structure
*/
twifi_info *wifi_param_init(const char *ssid, const char *passwd);/*** device parameter initialized* * @param dev_name: device name* * @param manufacturer: device manufacturer* * @param product: product name* * @param SN: product serial number* * @param tenant: tenant device* * @return tdeviec_info: Dynamic allocation device info structure
*/
tdeviec_info *dev_para_init(const char *dev_name, const char *manufacturer, const char *product, \const char *SN, const char *tenant);/*** Wifi station mac address* * @param data: Wifi station mac address data* * @return void
*/
void get_sta_mac_addr(char *data);/*** Connected to the Internet to register** @param wlan_info: wifi name , wifi passwd** @param dev_info: device info ,(dev_name、manufacturer、SN、product、tenant)* * @param key: Visiting the website key** @return =0: wifi connect failure*         =1: device register success*         =2: device register failure*/
char dev_register_init(twifi_info *wlan_info, tdeviec_info *dev_info, char *key);/*** Get the positioning result function* * @param wlan_info Wifi related information* * @param key Visiting the website key* * @param post_data post gnss and cellulars data, obtain positioning results* * @param location get location result* * @return >0: success*         =0: location failure*
*/
char get_position_info(twifi_info *wlan_info, char *key, tpost_data *post_data, tlocation_info *location);/*** print location result* * @param location location info* * @return void:*
*/
void location_print(tlocation_info location);

wayz_iotkit 示例程序

示例程序路径 说明
samples/location_client.c.c wayz_iotkit 测试例程

运行示例

1、申请ACCESS_KEY

  • 需要在平台申请ACCESS_KEY,目前只能提供人工申请的方式
    在示例代码中的宏中填写申请的ACCESS_KEY字段,例如:
#define  ACCESS_KEY     "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

2、填写wifi、设备相关信息

修改将所要连接网络的AP即用户名、密码等;也可以在选择组件时指定wifi相关信息。例如:

#ifdef PKG_WAYZ_IOTKIT_WIFI_SSID
#define  WAYZ_WIFI_SSID      PKG_WAYZ_IOTKIT_WIFI_SSID
#else
#define  WAYZ_WIFI_SSID      "thread"
#endif#ifdef PKG_WAYZ_IOTKIT_WIFI_PASSWORD
#define  WAYZ_WIFI_PWD      PKG_WAYZ_IOTKIT_WIFI_PASSWORD
#else
#define  WAYZ_WIFI_PWD      "12345678"
#endif

修改设备相关信息,例如:

#define  DEV_NAME       "PANDDRA"      // 设备名称
#define  VENDER         "ALIENTEK"       // 设备生产商
#define  PRODUCT        "FINDU01"    // 设备所属产品
#define  SN             "1234567"    // 产品序列号
#define  TENANT         "WAYZ"           // 设备所属租户,通常是开放平台的用户 ID

3、GNSS、基站数据的填充

tpost_data post_data = {0};                 // 定义上传数据结构体post_data.gnss.timestamp = 1606729066000;
post_data.gnss.lng = 114.39583641301239;
post_data.gnss.lat = 30.51769862171484;
post_data.gnss.accuracy = 8;post_data.cellulars.count = 1;
post_data.cellulars.cell[0].timestamp = 1515743846504;
post_data.cellulars.cell[0].cell_id = 149833211;
rt_sprintf(post_data.cellulars.cell[0].radio_type, "%s", "gsm");
post_data.cellulars.cell[0].mcc = 460;
post_data.cellulars.cell[0].mnc = 11;
post_data.cellulars.cell[0].lac = 36558;// 传入获取定位函数中
get_position_info(wlan_info, ACCESS_KEY, &post_data, &location);

4、在finsh命令行中输入location_test命令即可调用示例代码

示例结果

timestamp: 1606293694990 ms
gcj02:latitude:30.515105longitude:114.401555
wgs84:latitude:30.517407914397longitude:114.396014616712
POI: {"id": "7SkEZdfXQfS","type": "Residential","name": "中建东湖明珠国际公馆","categories":[{"id": 10200,"name": "住宅"}]}

物联网基于wifi定位模型相关推荐

  1. 基于WIFI定位的室内定位系统--WIFI室内定位--新导智能

    一.RTLS系统概述 近年来,随着信息技术在外勤人员定位管理及移动资产跟踪定位管理的应用,移动考勤系统与资产跟踪定位正在进入一个新的飞速发展时期, 计算机技术.RFID技术的不断突破给这一领域注入了新 ...

  2. Android 物联网基于WIFI tcp配网流程

    1配网流程 1.2流程说明 1.2.1 由用户手动输入WiFi的SSID 和pwd 1.2.2 此时需要配网的设备进入配网模式打开热点,热点令名规则为Tlink-xxx-xxx格式,第一个xxx为设备 ...

  3. 基于Wi-Fi定位的签到考勤系统

    系统展示 详细代码及论文 企鹅 2262604603 概要 考勤在企业管理的过程中是一项重要的工作,目前常见的考勤方式是采用指纹打卡和射频卡考勤,这些考勤方式存在一定的不足,那就是上下班高峰期会面临耗 ...

  4. 基于Wi-Fi的室内定位在美团总部的实践和应用(上)

    室内定位技术的商业化必将带来一波创新高潮,尤其是在O2O领域,各种基于此技术的应用将出现在我们的面前.我们可以想象一些比较常见的应用场景,比如在大型商场里面借助室内导航快速找到目标商铺,商店根据用户的 ...

  5. 基于WiFi的室内定位

    摘要 GPS难以解决室内环境下的一些定位问题,大部分室内环境下都存在WiFi,因此利用WiFi进行定位无需额外部署硬件设备,是一个非常节省成本的方法.然而WiFi并不是专门为定位而设计的,传统的基于时 ...

  6. TensorFlow练习6: 基于WiFi指纹的室内定位(autoencoder)

    本帖基于论文:Low-effort place recognition with WiFi fingerprints using Deep Learning 室内定位有很多种方式,利用WiFi指纹就是 ...

  7. 基于Wi-Fi的室内定位在美团总部的实践和应用

    http://tech.meituan.com/mt-wifi-locate-practice-part1.html 室内定位技术的商业化必将带来一波创新高潮,尤其是在O2O领域,各种基于此技术的应用 ...

  8. android 网络wifi定位服务器,基于位置指纹算法的Android平台WiFi定位系统

    近年来,随着城域无线基础网络的发展,热点(AP)的覆盖范围已大大增加. 由于对定位服务的需求增加以及WiFi应用的扩展,WiFi定位已成为一种有效的定位方法. GPS卫星定位是最重要的定位方法. 它需 ...

  9. 基于WiFi 的CSI和RSS混合指纹室内定位

    着无线网络和移动设备的普及,基于WiFi信号的室内定位受到越来越多的关注.接收信号强度(RSS)作为一种容易获得的信号特征常用于室内定位系统中.但是,由于RSS是粗粒度信息,其常常受到多径效应及噪声信 ...

最新文章

  1. web编程速度大比拼(nodejs go python)(非专业对比)
  2. ISME:水库蓝藻影响真核浮游生物的群落演替和物种共存
  3. Nature封面:IBM团队发布“AI辩论家”最新研究进展、Insitro创AI制药领域单笔融资金额记录 | AI日报...
  4. python 爬虫 ,抓取所有豆瓣好友读的书,列出读过最多的书。(模拟loging豆瓣)...
  5. 荐六十款针对Hadoop和大数据顶级开源工具
  6. dev 命令行参数调用_云开发·云调用生成小程序码
  7. html5填空题阅卷,“过五关”般严格,高考阅卷老师来自哪里?研究生参与阅卷?
  8. python里的文件I/O
  9. oracle数据库实例关闭步骤,Oracle 数据库实例起动关闭过程
  10. Java Servlet ServletContext
  11. azure云数据库_保护Azure SQL数据库免于意外删除
  12. JavaScript浏览器对象Window对象常用方法(3)
  13. HP刀片服务器C7000-Cisco网络模块配置指南
  14. 通过CuteFTP用VBScript使用SFTP,实现Win与Linux的文件传输
  15. postgresql立式版本下载_【PostgreSQL下载】PostgreSQL官方版下载_多特软件站
  16. 科技爱好者周刊(第 190 期):产品化思维
  17. CTF密码学之RSA攻击算法
  18. 【毕业季】致大学江湖的青葱岁月,我与湖中大的四个夏天(情忆新月,梦系信科)
  19. python编辑svg文件_使用Python创建SVG
  20. Microsoft Visual Studio 2019 美化之——透明化窗口 Microsoft Visual Studio 2019 C/C++ Windows 下重量级编辑器 Editor

热门文章

  1. 致谢词大全字C语言,致谢词范文
  2. 互联网金融系统实现之数据平台交互验证方式
  3. 变形金刚3:月黑之时1280超清迅雷下载
  4. win10电脑连接投影仪怎样设置,有相关教程吗
  5. 手撕鸭腌料批发场 新奥尔良烤肉腌料批发 奥尔良鸡叉骨腌料批发
  6. Qt编写通用主界面V2019
  7. 计算机监控系统软件设计,计算机监控软件设计.doc
  8. 北漂生活第十九弹-再谈留在大城市的一张床还是小城市的一套房
  9. Python学习 Day31 JS类数组对象
  10. 弥散阴影html,设计弥散阴影效果海报图片的PS实例教程