前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【IoT迷你赛】基于Tos开发板和Wi-Fi探针技术实现“无感体验”iot生活

【IoT迷你赛】基于Tos开发板和Wi-Fi探针技术实现“无感体验”iot生活

原创
作者头像
用户4143477
修改2019-08-28 12:59:06
1.3K0
修改2019-08-28 12:59:06
举报
文章被收录于专栏:腾讯云IoT腾讯云IoT

文章目录:

  1. 导语
  2. 开发背景
  3. TencentOS Tiny简介
  4. Wi-Fi探针技术简介
  5. Demo整体方案设计
  6. 开发环节
  7. 演示效果展示
  8. TO-DO List
  9. 尾巴
  10. 总结

导语:

物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。世界上的万事万物只要嵌入一个微型芯片都能把它智能化,借助物联网技术,人们就可以和物体对话,物体和物体之间进行交流。

物联网
物联网

开发背景:

在iot技术发达的未来,越来越火的智能生活是否可以最大化地减少用户和硬件之间的交互,让用户无感知来体验智能生活,相信这样的方式是十分诱人的,例如:智能硬件不仅能感知家里是否有人,还能感知主人在回家的路上,又或者是已经离开家一会了,进而在主人回到家之前和离开家之后,帮助他完成一系列的日常操作,如晚上开关灯,夏天开关风扇、空调,冬天开关暖气或者热水器等,这些操作对于用户是无感知的,都由硬件自己来完成,硬件在这里犹如充当了贴心管家的角色。如果用户在家时需要改变硬件的状态,就可以通过app或者语音交互的方式来操作。PS:现在的技术应该还不能做到通过人的意念来控制设备。

在前不久华为发布了基于鸿蒙系统的荣耀智慧屏,当时在网上也看了很多博主的体验视频,印象最深的一个地方是当使用者对这荣耀智慧屏喊一声“我回家了”,智慧屏就会自动开启窗帘、电灯、空气净化器等智能设备。当时也为这一系列的智能化操作惊叹了许久,但惊叹过后总感觉还是有一点遗憾,因为感觉它与很多传统智能硬件相同,依旧没有将方便用户生活做到极致,可能荣耀智慧屏也在向这关键性的一步改进着。

因此,为了实现“无感体验”这个想法,在很荣幸拿到TencentOS tiny内测开发板后,想结合之前实习时研究的Wi-Fi探针技术来实现一套用户“无感知体验”的智慧生活解决方案。PS:说的有点高级,其实只是个demo,也并不是完全的无感知,哈哈。下面我们开始进入正题。

TencentOS tiny简介:

TencentOS tiny是面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,可裁剪等特性。TencentOS tiny 可以有效减少开发人员在任务管理、硬件支持、网络协议支持、安全方案以及文件系统、 KV 存储、在线升级等常用功能组件相关的开发中所需要的时间和工作量,并且能够快速高效的实现设备的低功耗运行,提供强大的开发调试功能,减少开发测试人力成本,使客户的产品能够实现快速开发和快速上线交付。TencentOS tiny 由一个轻量级 RTOS 内核 + 多个物联网组件构成,如下图所示。

Wi-Fi探针技术简介:

Wi-Fi探针是指基于Wi-Fi探测技术,自动采集特定范围内已开启wifi功能的移动终端设备(Android或IOS智能手机、手提电脑、平板等)并获取设备MAC层协议数据单元中的信息的一种硬件。这样说可能有点抽象,举个栗子: 我们平时使用的手机在与路由器进行无线通信过程中,会发射和接收无数以802.11协议封装的数据报文,当一个设备给另外一个设备通过无线网络发送这些报文时,周围的其他同类设备都是能够收到这些信息的,WiFi探针技术就是基于这个原理。(关于Wi-Fi探针技术的原理讲解,后面有时间单独写一篇文章来介绍)

Demo整体方案设计:

该方案主要由三个部分组成:

  1. 基于TencentOS tiny开发板(后面简称tos开发板)的控制模块;
  2. 基于ESP8266NodeMCU的MQTT服务端(Broke)和ESP-01的Wi-Fi探针嗅探模块;
  3. Android平台APP控制端;
Demo方案
Demo方案

当探针嗅探模块探测到用户手机的无线数据包时,会发送开灯指令给tos开发板,tos开发板在收到指令后会根据指令内容来控制LED灯。在用户离开家后,3分钟内探针嗅探不到用户的手机的无线数据包,会发送关灯指令给tos开发板引导其关闭LED灯。用户在家时,可以通过APP控制来改变硬件的状态,APP也是通过局域网接入到服务器。三者之间的通信是在局域网内通过MQTT协议来实现。

开发环节:

需要的硬件:

  1. TencentOS tiny开发板
  2. ESP8266NodeMCU开发板
  3. ESP-01联网模块(探针)

控制模块和LED灯的实现:

控制模块开发板:EVB_MX是腾讯物联网操作系统TencentOS tiny 团队联合南京厚德物联网有限公司设计的一款物联网评估板,用于 TencentOS tiny 基础内核和 IoT 组件功能体验和评估。

TencentOS Tiny开发板
TencentOS Tiny开发板

LED灯源的选择:为了缩短开发时间,直接使用了开发套件提供的E53_SC1模块中的LED灯。

E53_SC1
E53_SC1

控制LED灯,可以通过控制STM32(TOS开发板的芯片属于stm32系列)芯片的I/O引脚电平的高低来实现。在STM32芯片上,I/O引脚可以被软件设置成各种不同的功能,如输入或输出,所以又被称为GPIO。而GPIO引脚又被分为GPIOA、GPIOB、…等不同的组,每组端口分为0-15共16个不同的引脚。在E53_SC1模块中,想要控制其LED灯,则可以通过控制GPIO_PIN_9引脚来实现。

首先进行GPIO引脚的初始化操作:

在代码清单中,定义了一个名为GPIO_InitStruct的结构体,结构体类型为GPIO_InitTypeDef。重点来看一下GPIO_InitTypeDef类型的三个成员,分别为uint16_t类型的GPIO_Pin,GPIOSpeed_TypeDef类型的GPIO_Speed以及GPIO_TypeDef类型的GPIO_Mode。

GPIO_Pin: 代码中我们为GPIO_Pin变量赋值为GPIO_Pin_9,表示我们选择了控制GPIO端口的第9个引脚。

GPIOSpeed_TypeDef可用于标识GPIO引脚可以配置成的输出最高速度。这个最高速度我们可以理解为输出驱动电路的最高频宽,即一个驱动电路可以不失真地传输讯号的最大频率,GPIO引脚的速度跟应用相匹配,速度配置越高,干扰会越大,功耗越大。这里只要到了E52_SC1模块中的小LED灯,因此我们设置为低频即可。

GPIOMode_TypeDef是一个枚举类型定义符,有8种不同的值,原型如下,是用来帮助配置GPIO引脚的输入输出工作模式。

在Demo中,只用到了引脚输出的高低电平来控制LED灯,因此代码中选择了GPIO_MODE_OUTPUT_PP 推挽输出的工作模式。当然,如果我们需要获取传感器采集的数据,可以按需选择输入模式来工作。

LED控制程序:

HAL_GPIO_WritePin:

开灯:传入GPIO_PIN_SET标志位可以控制引脚输出高电平

关灯:传入GPIO_PIN_RESET标志位可以控制引脚输出低电平

TencentOS Tiny对OLED显示屏的操作进行了封装,调用OLED_Clear()可以将显示屏清空,调用OLED_ShowString()传入字符内容就在显示屏上显示出想要的文字内容。

MQTT协议部分:

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用

Demo中Tos开发板作为MQTT客户端来使用。

初始化并订阅控制信号Topic:

监听接收到的数据包:

注:这里处理方式并不完美,后续会尝试使用多任务来实现

收到控制指令,开发板改变完LED的状态后会回复已经操作的数据给MQTT的服务端(ESP8266开发板),程序清单如下:

探针嗅探模块和MQTT服务端的实现

ESP8266是一块由乐鑫设计的 wifi 芯片,虽然它的定位是个 Wi-Fi 网络解决方案,但它更像一个物联网解决方案。它不仅体积小——大概 11*10 毫米左右,而且造价便宜,一个 ESP8266 的集成板只需要十几块。相比之下,在同等类似的芯片中,WRTNode 需要一百多,而 Particle(Spark Core)则需要更多的花费。目前用的比较多的ESP8266模块是ESP-01和NodeMCU。

ESP-01的体积很小,而且为直插式,复用性也很好,只是它引出了 8 个脚,使得针脚的资源十分紧张。对于编写好的新固件,要自己准备USB转串口烧录工具来烧录,同时烧录的过程中要注意CH_PD引脚置3.3v高电平,GPIo0引脚置低电平。新手建议直接入手NodeMCU模块,可以直接通过usb线来烧录。

NodeMCU是一款基于 ESP8266 的开源快速硬件原型平台,包括固件和开发板,借助于官方封装好的SDK,开发者能快速开发物联网应用。

Demo中,主要借助ESP-01实现探针嗅探模块,NodeMCU来实现MQTT协议的服务端模块,同时NodeMCU可以通过串口接收ESP-01探针嗅探并匹配到的用户的数据,从而进一步通过局域网来远程控制Tos开发板。

代码清单:

发布到tos开发板和订阅来自tos开发板的Topic:

NodeMCU MQTT服务端初始化并处理数据回调逻辑:

LazyBox终端APP实现

如果只是实现前面的几个环节,硬件已经初步具备了“无感体验”的能力,但它是不完整的,因为无法满足使用者在家手动改变设备状态这个需求。这时,可以借助终端APP来实现。

终端APP具备的能力:

  1. 帮助NodeMCU模块智能配网(通过SmartConfig方式)
  2. 远程控制改变LED灯的状态(亮度,定时模式,睡眠模式,闪烁模式)
  3. 检测联网设备状态(是否在线,离线时辅助重连)
  4. 支持控制更多设备(由于时间关系目前只实现了控制LED)

设备最终形态:

演示效果展示:

运行日志:

NodeMCU MQTT服务端Log:

Tos开发板Log:

视频演示:

https://www.bilibili.com/video/av65660874

TO-DO List:

  1. 接入腾讯云物联网通信IoT Hub平台,实现非局域网内控制设备(因为时间关系,虽然运行了官方的Demo,但没来得及接入)
  2. 探针支持通过APP配置目标用户MAC地址(多个)
  3. 设备状态改变时PUSH到APP端
  4. 引入更多设备,如小风扇,智能插座等
  5. 性能强大的Tos开发板用来当控制模块确实有点大材小用了,后面深入学习后会考虑与NodeMCU的角色互换
  6. 改进设备配网方式,SmartConfig有点慢

尾巴:

相信大家看完文章后会有很多疑问,OK,请继续往下看。。。

有问有答

1,为什么会选择WiFi探针技术来尝试?用红外或其他传感器辅助不行吗?

答: 我们以“无感体验“开关灯的例子来对比分析一下使用红外传感器会有什么缺点:首先要确保安装的位置对准用户常出现的地方,如果用户在家里走动,还要安装多个传感器保证时刻感知到用户的存在,不然会导致灯突然被熄灭。而使用wifi探针无需顾虑这么多因素,只要用户出现在探针的嗅探范围内(半径10米),并且手机打开了WiFi功能,不管用户有没有连接上路由器,他的无线数据包都能被探测到,从而进行网络通信实现控制操作(据观察,大部分用户手机的WiFi功能出门或者回家很少会手动关闭,当然打游戏除外)。当然,使用探针来实现并不是完美的方案,个人觉得通过gps加地图的地理围栏技术来实现也许会更好,但是能想到的限制也不少,首先是gps数据如果从自己开发的硬件来,那就得让用户时刻携带着设备了,然后如果是从手机的gps数据来,那用户的手机需要安转必备的app来发送gps心跳包,而且Android用户还要确保应用不被强杀后台。两个数据来源都是为了gps数据正常传输,不然无感体验都会失效。大家看到这里,如果有新的无感体验idea,欢迎留言。

2,如果手机在家没有开启WiFi功能,3分钟后灯是不是会自动熄灭?

答:是的,因为探针的工作原理是基于接收到802.11协议无线数据包并解析其中的mac地址内容来识别用户的,关闭了WiFi功能等同于手机就不再发出此类型数据包。

所以无感设备就无法正常工作了。

3,只有手机连接上了路由器,无感设备才能正常工作吗?

答:这个不是必须的,平时我们的智能手机只要开启了WiFi功能,它就会不间断地发送无线数据包与周围的路由器通信,尝试建立连接。感兴趣的小伙伴可以Google搜索 802.11协议的probe帧

4,文章围绕了无感体验四个字来展开的,但是看完了之后没有感觉到无感体验在哪里体现在出来?

答:请注意,文章中的无感体验使用了双引号来括住,所以这里说的无感体验并不是真正意义上的无感。我来说一下日常使用的测试场景和感受:外出上班离开家,家里面的探针在一定的时间段内暂时捕获不到我的无线数据包。因为探针的数据包会上传到服务端,由服务端进行处理,这时服务端在一定时间段内未match到用户,然后随即下发断电指令至家里面的无线控制终端,如Tos开发板控制LED灯,终端收到后执行关闭操作;然后是用户下班回家,在未进家门时(可能还在楼道里)探针会优先捕获到用户的无线数据包并发送到服务端,服务端处理并识别到用户后随即下发通电指令给控制终端,控制终端收到后执行打开操作。当你打开门的一瞬间,就会发现,家里的智能设备已经按部就班地工作了。

总结:

笔者是一名STM32 MCU开发小白,本着会一点ESP8266开发的勇气申请了Tos开发板的内测资格。没想到运气还不错,居然命中了。不过在拿到开发板后,看着做工精良,布局工整的板子,当时一脸蒙逼的我真不知从何下手,还好官方提供了详细的文档以及基础的入门案例,便愉快的学了起来。由于时间关系,还没有深入的学习,文章中对Tos开发板的分析也只是浮于表面,简单讲了自己使用的一小部分功能。当然,甩出来的todo list的锅自己还是会背的。后面有时间我们再会。

开发花絮
开发花絮

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导语:
  • 开发背景:
  • TencentOS tiny简介:
  • Wi-Fi探针技术简介:
  • Demo整体方案设计:
  • 开发环节:
    • 需要的硬件:
      • 控制模块和LED灯的实现:
        • 探针嗅探模块和MQTT服务端的实现
          • LazyBox终端APP实现
            • 设备最终形态:
              • 运行日志:
              • 视频演示:
          • 演示效果展示:
          • TO-DO List:
          • 尾巴:
            • 有问有答
              • 1,为什么会选择WiFi探针技术来尝试?用红外或其他传感器辅助不行吗?
              • 2,如果手机在家没有开启WiFi功能,3分钟后灯是不是会自动熄灭?
              • 3,只有手机连接上了路由器,无感设备才能正常工作吗?
              • 4,文章围绕了无感体验四个字来展开的,但是看完了之后没有感觉到无感体验在哪里体现在出来?
          • 总结:
          相关产品与服务
          物联网
          腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档