首页资源分类嵌入式处理器Freescale > 恩智浦KW41微控制器设计大赛作品集

恩智浦KW41微控制器设计大赛作品集

已有 445176个资源

下载专区

文档信息举报收藏

标    签:KW41Thread蓝牙BLE

分    享:

文档简介

本书主要收录了恩智浦 KW41 线上开发大赛网友 DIY 过程中的经验分享 、大赛获奖作品和大赛颁奖礼直播的相关内容。下面简单介绍下本书的使用方法,希望可以帮助你更快地挖掘相关内容。

在阅读每节内容时,如对内容有疑问等,可点击查看内容来源,跟帖和作者交流。同时注意每节中的相关内容推荐部分,这部分内容是本节内容的拓展或者相同内容的不同表达方式,可以更好地让你理解相关内容。

在开发过程中,如果您遇到问题,可以先阅读 FAQ 章节,本节汇总了大赛网友在开发过程中遇到的问题及相应解决办法。

文档预览

看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 恩智浦 KW41 微控制器设计大赛作品集 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 返回目录 恩智浦 KW41 微控制器设计大赛作品集 1 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 导读 本书主要收录了恩智浦 KW41 线上开发大赛网友 DIY 过程中的经验分享 、大赛获奖作品和大赛颁奖礼直 播的相关内容。下面简单介绍下本书的使用方法,希望可以帮助你更快地挖掘相关内容。 在阅读每节内容时,如对内容有疑问等,可点击查看内容来源,跟帖和作者交流。同时注意每节中的相关 内容推荐部分,这部分内容是本节内容的拓展或者相同内容的不同表达方式,可以更好地让你理解相关内容。 在开发过程中,如果您遇到问题,可以先阅读 FAQ 章节,本节汇总了大赛网友在开发过程中遇到的问题 及相应解决办法。 本书内容相关交流社区和即时交流通道如下所列。大部分 KW41 参赛者(本书内容的主要贡献者)在交流 群内,欢迎感兴趣的网友加入交流。 恩智浦网络社区:点击进入 EEworld 社区:点击进入 恩智浦大赛 QQ 群:259363488 恩智浦大赛微信群:加 helloeeworld 为好友,备注 KW41,管理员就会拉你入群。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 2 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 目录 导读.............................................................................................................................. 2 一、初步解剖 摸索开发 KW41 那些事儿............................................................................. 5 KW41 开发套件简介.................................................................................................................................. 6 开发资源下载和官方 SDK 生成.................................................................................................................. 8 开发环境建立和初调试............................................................................................................................ 10 入门例程 点亮开发板的 LED.................................................................................................................... 15 浅尝通信 运行 MyStarNetworkDemo..................................................................................................... 25 二、小试牛刀 实战 Thread 和 BLE 开发........................................................................... 26 Thread/BLE 双模技术详解(视频)........................................................................................................ 27 Thread 简介及例程编译与测试................................................................................................................ 28 Thread 学习资源和学习路线................................................................................................................... 32 Thread 获取入网的节点地址列表方法..................................................................................................... 35 在 RaspberryPi 上部署 KW41Z TUN/TAP............................................................................................... 36 KW41Z + RPi + OpenWRT 实现边界路由器............................................................................................. 39 基于 FRDM-KW41Z 的 Thread 信号测试................................................................................................. 43 BLE 简介及例程编译与测试..................................................................................................................... 45 基于 MCUXpresso 工程分析一下 BLE 项目结构...................................................................................... 50 测试 KW41Z Bluetooth HID 例程的心得................................................................................................. 53 BLE 的 Android 上位机开发.................................................................................................................... 55 基于 BLE 协议和 SMAC 协议的 Wireless UART 实测对比........................................................................ 61 zephyr 的 MCUXpresso 攻略.................................................................................................................. 63 成功将华为 LiteOS 移植到 FRDM-KW41Z 上面....................................................................................... 70 三、收汁出锅 开发大赛获奖作品展示............................................................................... 71 远程家庭物联网关................................................................................................................................... 73 灾害救援车的高速数据传输及动态监控................................................................................................... 78 观赏鱼自动无线喂食系统......................................................................................................................... 82 智能台历.................................................................................................................................................. 86 返回目录 恩智浦 KW41 微控制器设计大赛作品集 3 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 基于 BLE 的智能门禁系统........................................................................................................................ 90 基于 KW41Z 的智能电力监测仪的设计.................................................................................................... 99 基于国网 DL645 协议的可蓝牙无线抄读的智能仪表.............................................................................. 106 通用无线遥控器..................................................................................................................................... 110 BMS 智能锁........................................................................................................................................... 111 智能管家——瓦力................................................................................................................................. 113 其他优秀作品......................................................................................................................................... 120 FAQ 篇........................................................................................................................121 附录:100 个大赛入围的创意.........................................................................................122 版权声明.....................................................................................................................124 返回目录 恩智浦 KW41 微控制器设计大赛作品集 4 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 一、初步解剖 摸索开发 KW41 那些事儿 返回目录 恩智浦 KW41 微控制器设计大赛作品集 5 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 KW41 开发套件简介 内容来源:FRDM-KW41Z 恩智浦官方介绍页面 网友评论 “这是恩智浦最新的 802.15.4 SoC 解决方案,也是目前支持 google Thread 最完善的板子,Thread 是物 联网末端的最终目标 IP 化、标准化,恩智浦作为 Thread 核心成员,大力推进开源发展,我想有必要玩一下。 很久之前看到这个板子在国内代工的第一代样板就有点激动,听说这个板子当初国内工程师帮忙改进了射频部 分的布局,对最终发射功率有改善,不知道最终有没有被采纳。” 来自 EEworld 论坛资深网友 lyzhangxiang 概述 FRDM-KW41Z 是采用基于 ARM® Cortex®-M0+ 处理器的 Kinetis® W 系列 KW41Z/31Z/21Z (KW41Z) 系列 支持的开发套件,具有集成的 2.4 GHz 收发器,支持 Bluetooth® Smart/Bluetooth®Low Energy (BLE) v4.2、 Generic FSK、IEEE® 802.15.4 和 Thread 协议。 FRDM-KW41Z 套 件 包 含 两 个 Freedom 电 路 板, 可 用 作 与 主 处 理 器 连 接 的 开 发 板 或 Shield 扩 展 板。 FRDM-KW41Z 的规格与 Arduino ™ R3 引脚布局兼容,提供了更多的扩展选项。 FRDM-KW41Z 高灵敏度、优化的 2.4 GHz 无线电具有 PCB F 天线 ( 可以绕过它,通过 SMA 连接进行测试 )、 多个电源选项、推拉式及电容式触摸按钮、开关、LED 和集成传感器。 板载资源如下图所示,关于开发板各部分电路的简介 , 请点击前往 FRDM-KW41Z 用户使用手册查看。 图示 FRDM-KW41Z 开发套件板载资源 返回目录 恩智浦 KW41 微控制器设计大赛作品集 6 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 特性 可配置为与主处理器连接的主电路板或 Shield 扩展板 支持所有 DC-DC 配置 ( 降压、升压和旁路 ) PCB 反向 F 型天线 SMA RF 接头 获得射频监管认证 OTA 固件升级的串行闪存 板载恩智浦 FXOS8700CQ 数字传感器、3D 加速度传感器 (±2g/±4g/±8g) + 3D 磁力计 OpenSDA 和 JTAG 调试 全面的 KSDK 支持 开箱上电和快速入门 (1) 连接 USB 线缆 (2) 运行开箱即用的演示 当您连接电路板时,多色 LED 会闪烁。如果没有看到 LED 闪烁,请先拔下并重新插入电路板。 (3)关于开发板更多软硬件资源,可访问 www.nxp.com/FRDM-KW41Z/startnow。 (4)开发交流 如果开发过程中有心得分享或者一时难以解决问题,可前往恩智浦网络社区或者 EEworld 社区相应版块 交流。 注意: KW41 开发套件包含两块 FRDM-KW41Z Freedom 开发板,如果想同时调试这两块开发板,需要修改 FRDM-KW41Z OpenSDA 序 列 号, 详 细 操 作 请 点 击 前 往 EEworld 网 友 allenliu 分 享 的 帖 子: 修 改 FRDM- KW41Z OpenSDA 序列号 返回目录 恩智浦 KW41 微控制器设计大赛作品集 7 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 开发资源下载和官方 SDK 生成 本节部分内容来源 KW41 参赛网友 dql2016 分享帖:点此查看 开发环境 恩智浦官方免费开发环境 MCU Xpresso IDE 其他推荐开发环境 IAR 文档 FRDM-KW41Z 用户使用手册 FRDM-KW41Z 原理图(PDF) FRDM-KW41Z 工程文件(OrCad/ Allegro) 点击查看更多 关于 FRDM-KW41Z 信息 KW41Z 数据手册 KW41Z 用户手册 点击查看更多 关于 KW41 信息 官方 SDK 生成 特别注意:按照下面的说明,即可获取最新的 SDK。 点击登陆恩智浦官网,进入 MCUXpresso 主页。如下图所示,点击 SDK 生成器; 返回目录 恩智浦 KW41 微控制器设计大赛作品集 8 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 搜索并选择相应套件,确认信息后,点击快速开始您的配置按钮 点击立即下载,即可获得最新的 SDK。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 9 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 开发环境建立和初调试 本节内容来源 KW41 参赛网友 zhaogong 分享帖:点此查看 本节相关内容推荐阅读: MCUXpresso 新建工程经验分享 ( 参赛网友:liyuyao001) KW41 环境搭建 gcc+jlink(参赛网友:lzwml) MCUXpressoIDE_10.0.0_344 环境小试牛刀(参赛网友:微笑的鱼) 听论坛网友侃谈 KW41 开发环境那些事儿(论坛网友:freebsder) MCUXpresso 的编码和调试(论坛网友:freebsder)           图示 KW41 开发套件开箱秀 恩智浦新推出的 Kinetis-KW41Z 开发套件,无论是包装还是做工都是非常出色的。而且,通过之前的了解, 功能方面也是一样的给力。我也是第一次使用恩智浦的高端芯片开发项目,不过,幸好官方在如何开发方面还 是做足功夫的,在官网上就有详细的初步开发调试步骤,也有相关已经使用过该开发板的经验心得(这些基本 都可以在 EEWORLD 论坛上找到,在这次比赛中也有相关的宣传 ),这些都为像我这样的初学者提供了很好的 学习资料。下面我就分享一下这初学的经历。 (1)在开发之前,相关文档资料的查阅,这是必不可少的,必须先大致了解一下我们手头上的板子才能 更好的开始。这方面的资料,一般都是通过官网和网上一些大神分享出来的。我这里主要还是通过官网获取 的,目前恩智浦官网上有一套比较详细的入门介绍的,而且还是中文版,从中可以查阅和下载到相关的资料, 返回目录 恩智浦 KW41 微控制器设计大赛作品集 10 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 这点算是做得非常好的,点此即可进入,打开的界面如下图所示。这一步主要还是通过原理图,了解板子的基 本构造等。    (2)开始 MCUXpressoIDE 开发环境的搭建和例程演练 点击进入官方快速入门页面,可以看到相关的操作说明和视频演示,按照说明,完成步骤中的第一步“连 接”。如图:     连接 USB,可以看到板子上三处的 LED 等亮起,其中一处的 RGB 灯跑马式点亮,证明板子没有问题。 回到页面,点击下一步,来到获取软件,这步开始就比较重要了。界面如下: 返回目录 恩智浦 KW41 微控制器设计大赛作品集 11 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技    大家可以先看看视频了解内容,我这里是要用官方的 MCUXpressoIDE 开发环境来进行开发,所以只要 下载如下图三个工具就好了:(下载前都要注册,按要求注册即可) 第一个,下载 SDK 开发包,下载完直接解压就行了。(注:想获取最新的 SDK,请查看上一节的关于官 方 SDK 生成部分的内容,建议通过上节的方法获取 SDK。) 返回目录 恩智浦 KW41 微控制器设计大赛作品集 12 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 第二个,下载开发软件 MCUXpressoIDE,这个下载速度比较慢,需要点耐心等待,下载完直接双击安装 就好了,安装过程还会选择安装很多驱动插件,我全部选安装。最后打开的界面如下:     如果有过 JAVA 和 Android 系统开发的人一看应该就很熟悉,这个不就是 Eclipse 开发平台么,没错,恩 智浦的这个软件就是基于 Eclipse 平台扩展的开发软件。     第三个,下载 MCU 配置软件,双击 MCUXpresso_Config_Tools_v3_x64,把配置软件也安装好。然后再 点击下一步,来到第三步的调试例程的步骤。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 13 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技     如图,它这里提供了四个很详细的演示例子,我们只需要通过页面上的视频和右下角按钮就能获取到很详 细的操作步骤,按照步骤就能完成相关的事例演示,我这里就不多阐述了,大家可以自己去尝试。 再点击下一步,就到了第四步,如何通过 MCUXpressoIDE 配置工具进行软件工程的初始化配置,其中包 括引脚的配置和时钟,以及相关外设的初始化配置。这里只需要点击页面上的相关按钮,获取到操作步骤说明, 然后按照步骤自己操作练习就好了。 最后一步是介绍该芯片的一些主要应用和相关的一些技术支持,大家也可以了解一下。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 14 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 入门例程 点亮开发板的 LED 本节内容来源 KW41 参赛网友 zhaogong 分享帖:点此查看 其他可参考入门例程推荐阅读: 板上 FXOS8700CQ-6 轴传感器的初调试(参赛网友 zhaogong) 初学 KW41Z 控制彩色液晶屏 ( 参赛网友 wolf11111) FRDM-KW41Z 驱动 74HC595 控制 8 段数码管实现计数器(参赛网友 littleshrimp) FRDM-KW41Z 入门——PWM 驱动舵机 ( 参赛网友 dql2016) 使用 MCUXpresso Config Tools 工具配置 FRDM-KW41Z 的端口输出 ( 参赛网友 dql2016) KW41Z 时钟(论坛网友:freebsder) 这篇的主要内容是如何克隆创建一个工程,然后对工程进行一些需求的修改。通过克隆创建一个新的工程, 并修改添加一些功能,最终是能够实现通过串口来控制 RGB 灯的亮和灭。 如何克隆创建一个工程在上节的官网快速入门页面中有详细的讲述的。这里简单的介绍我个人自行构建一 个工程的经验。具体步骤如下: (1)克隆创建一个新工程 根据需求,这里就要首先克隆一个 LED 驱动的例程工程。所以首先我们在官方的 SDK 包里,找到关于 LED 驱动的例程。打开 MCUXpressoIDE,导入 SDK 包(点此查看导入官方 SDK 的详细步骤),选择导入例程, 如下图所示。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 15 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技        图中红圈处就是关于 LED 驱动的例程,我们直接在其选项前打勾,并导入。最终导入的工程如下图:     (2)编译和烧录工程 烧录和测试的详细步骤见本人分享的相关帖子(点此查看)。经研究和测试,该例程可以实现板子上的 RGB 闪烁红光。 (3)使用 MCUXpresso config tools 工具配置额外需要的 I/O 口。 打开 MCUXpresso config tools,一般第一次打开就会跳出一个创建新配置的窗口,如下图所示。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 16 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技      如上图,在红圈 1 处选择 SDK 文件所在目录,并选择 2 处创建新配置选项,然后点击下一步,跳转下个窗口, 如下图所示。      如上图所示,选择示例中的 gpio/led_output 选项,点击完成,等待导入完成,跳转到如下界面。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 17 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技      这个就是配置界面了,从上图的红圈处我们看到它已经配置好 UART 输出 I/O 口,这里我只说一下怎么配置。 由板子的原理图可知,驱动 RGB 的三个 GPIO 为 PTC1、PTA18、PTA19,其中驱动红灯的 PTC1 也已经配置好的, 如下图所示。 在配置工具软件的左上角的工具选项里选择引脚这个选项,然后按照下图中的三个步骤添加路由引脚。      完成后,可以看到中下方的路由引脚方框里多了一个引脚配置,同理,添加另外一个路由引脚。 (4)修改好的源文件导入到目标工程 返回目录 恩智浦 KW41 微控制器设计大赛作品集 18 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 在配置工具软件的右上角点击源代码那个选项,然后按照以下几个步骤导入到上面导入的 IDE 例程工程里。      选择红圈处的 1、2 跳转到导入界面。      如上图,红圈 1 处选择的是开头 MCUXpresso IDE 导入的 LED 驱动例程所在的硬盘位置,两处选择的是 具体的 LED 驱动文件包里的 board 的文件夹,然后点击完成,它会弹出是否覆盖原文件时,点击是就行了, 至此,工程的中心配置已完成。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 19 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 (5)重新回到 MCUXpresso IDE 中,打开原来克隆导入的 LED 驱动工程,找到 board 目录下的 pin_ mux.c 源文件并打开:      如图,你会发现在 void BOARD_InitPins(void) 的函数中多了两个管脚的初始化代码。 下面我们就来对整个工程进行修改实现我们想要的功能。 首先,我们找到 main() 函数的入口,如下图所示。      然后,按照以下几个步骤修改代码: (1)先把不需要的代码屏蔽或者删掉,再添加上 LED 的引脚初始化代码,如下图所示。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 20 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技      红圈处为管脚初始化代码,内容是把驱动 LED 的三个引脚设为输出模式,并把输出电平拉高(即熄灭 LED),如果把它编译下载,会发现所有 LED 都熄灭了。 (2)添加 UART 初始化代码,这个可以参照其它关于串口的例程来自己整理添加,我这里添加的是如下 的代码:      图1 图2 返回目录 恩智浦 KW41 微控制器设计大赛作品集 21 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 图3 图4 其中,图 1 是添加的库文件,图 2 添加的是一个用于输出的字符串和一个用于初始化 UART 时赋值给串口 时钟源的变量,图 3 是添加的串口中断函数入口,图 4 是初始化的主要代码。至此,串口初始化完成,编译下 载,打开串口调试工具,一上电就能看到串口输出“Welcome,please input:”的字符输出。 接下来就是添加串口接收处理函数和 LED 控制函数,代码如下所示。 图5 返回目录 恩智浦 KW41 微控制器设计大赛作品集 22 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 图6 图7 返回目录 恩智浦 KW41 微控制器设计大赛作品集 23 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 图8 其中,图 5 是添加需要的数组变量,图 6 是添加的延时函数和数组清零函数,图 7 是 UART 串口中断处理函数, 图 8 是串口接收到的数据处理函数,整个工程最终实现通过串口发送指令就能控制 RGB 的开和关。编译下载, 重新上电,打开串口调试工具,使用以下几个指令就能控制 LED 的开和关了:DR=ON,DR=OFF 分别为打开和 关闭红灯,DG=ON,DG=OFF,DB=ON,DB=OFF 分别是控制绿灯和蓝灯的开关。 最后我把我改的工程源文件放上来(有需要的请点此前往作者分享帖,前往下载)。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 24 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 浅尝通信 运行 MyStarNetworkDemo 本节内容来源 KW41 参赛网友 allenliu 分享帖:点此查看 恩 智 浦 SDK 提 供 了 MyStarNetworkDemo 工 具 用 于 展 示 通 信, 程 序 位 于 [SDK]\tools\wireless\ myStarNetwork Demo. 步骤: 1. 连接两块开发板到 PC 2. 拷 贝 [SDK]\tools\wireless\binaries\mac_msn_coord_frdmkw41z.bin 到 第 一 块 板 ( 复 制 文 件 到 FRDM-KW41ZJ 盘符) 3. 拷贝 [SDK]\tools\wireless\binaries\mac_msn_ed_frdmkw41z.bin 到第二块板(复制文件到 FRDMKW41ZJ 盘符) 4. 拔出第二块板,安装电池或用外部 usb 充电器供电 (可选步骤, 用于验证通信) 5. 打开 MyStarNetworkDemo 程序。 6. 按第一块板上的 SW3 或 SW4 键, 过几秒 MyStarNetworkDemo 上显示的协调器上线。 7. 按第二块板上的 SW3 或 SW4 键完成第二块板和第一块板连接。 更详细的内容可参考同目录的应用说明文档(注:官方 pdf 上的文档说明的 bin 文件和实际的不一致, 应 该是 pdf 未更新)。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 25 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 二、小试牛刀 实战 Thread 和 BLE 开发 返回目录 恩智浦 KW41 微控制器设计大赛作品集 26 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 Thread/BLE 双模技术详解(视频) 根据 KW41 大赛参与网友的实际反馈,恩智浦 KW41 大赛线上颁奖特邀恩智浦半导体安全与连接事业部 嵌入式处理器高级系统工程师 Tom Zheng(郑海东),详细讲解了 Thread/BLE 双模技术开发。实录视频如下, 点击即可观看(点此查看直播实录、下载直播 PPT、查看 QA 等内容)。 点击下载 Thread/BLE 技术讲座 PPT 返回目录 恩智浦 KW41 微控制器设计大赛作品集 27 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 Thread 简介及例程编译与测试 本节内容来源 KW41 参赛网友 shinykongcn 分享帖:点此查看 本节相关内容推荐阅读: thread 之万丈高楼平地起(参赛网友 molin20150) 通信 MAC 测试程序试跑(参赛网友 damiaa) 开箱建网(参赛网友 ljj3166) Thread 简介 KW41 支持 Thread 和 BLE 同时的特性,让我很兴奋。Thread 属首次接触,看了挺长一段时间了,有的 地方可能还是一知半解,先记下来,有不对的地方,欢迎拍砖。在这里赞一下恩智浦提供的文档,kw41 的 SDK 提供了详细的文档,不用上网站一个个下,省心很多。关于 Thread 的文档位于 docs/wireless/thread 目录下。Thread 相关的 demo 也很丰富,这里暂时了解的有 router eligible device 和 end device 两种设备 类型的 demo,这两个 demo 能完整的表现 Thread 组网的内容,其中 reed 设备可以转换为 leader router、 active router 和 end device 的角色。除了 border router 与非 Thread 网络通信的内容,其它都可以从这两个 demo 中学习到。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 28 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 Thread 是一个针对 IoT 应用的 IPv6 mesh 网络协议,底层 mac 和 phy 层基于 802.15.4 无线协议标准 (Zigbee 也是基于 802.15.4). 这里的 IPv6 为 6LowPAN,下面看一下 Thread 的结构: 6LowPAN 在 mac 层和 phy 层之上,由 Thread 实现,Thread 同时实现的还有路由和 udp 协议,这些 都可以对比传统的网络模型加以理解。再之上就是应用层了,比较常用的是 CoAP 协议,可以类比为常见的 HTTP 协议,CoAP 协议全称为 Constrained Application Protocol ,由于 HTTP 这种协议用在嵌入式设备上显 得过于庞大,所有就有了 CoAP。 大概理清了 Thread 协议的结构之后,另外还需要理解一下 IPv6 协议才好进行下一步了。因为 Thread 中 跟其它节点沟通需要知道对方节点的 IPv6 地址 , 不同于以往的 IPv4 地址表示方法,IPv6 使用 128 位二进制数 据表示一个 IP 地址。IPv6 地址的记法分为标准和简写,这里以我的 KW41Z 的 ifconfig 信息为例说明一下。 标准写法为用:分割的 8 组 4 个 4 位 16 进制数表示,我的 KW41 的 ML64 地址 fd18:ac32:9b0f:b537:1 45d:c752:46ba:e917,而简写分为单组前 0 省略和多组全 0 省略。单组前 0 省略如 ML16 地址 fd18:ac32:9b 0f:b537::ff:fe00:400 的最后一组地址 400,本来应该为 0400,前面的 0 省略了。多组全 0 省略指当相邻的几 组全为 0 是,用两个冒号::省略这些 0,如 LL64 地址 fe80::8008:bcc4:9a4e:2d25, 这里需要注意的是,这 种::省略只能使用一次,因为多次的时候,就不能确定这中间到底省略了几组数据了。 另外 IPv6 还可以兼 容 IPv4,具体写法参考 IPv6 地址格式。 另外大家应该有注意到这里有好几个 IP 信息,前 3 个为单播 IP。 Link Local 指单个子网的 ip,即一个 active router 下有效,类似于我们常见的 192.68.1.x 局域网 ip; Mesh Local 指整个 Thread Mesh 网络的 IP 地址,用于在整个 Mesh 网络中通信;其实应该还有另外一种 IP 地址,由 border router 分配的广域网 IP,可全球定位的。 此 外 这 里 的 地 址 还 有 16 和 64 之 分, 这 里 的 16、64 指 的 是 子 网 掩 码, 类 似 于 我 们 平 时 常 见 的 返回目录 恩智浦 KW41 微控制器设计大赛作品集 29 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 192.168.1.0/255.255.255.0,这种子网还有另外一种记法就是 192.168.1.0/24,也就是我们这里的 LL64、 ML16 这样的地址了,可不要以为是 16/64 位地址哦。 后二个为多播 / 组播 IP,用于数据广播,不做进一步解释。 Thread 例程编译与测试 编译过程请参考第一章相关内容,不再赘述。本部分内容参考参赛网友 ljj3166 的开箱建网帖子中的相关 部分。 一块开发板烧录 ble_thread_router_wireless_uart 例程,一块烧录 router_eligible_device,烧录成功后, 查看串口工作情况 根据 shell 提示,发送 thr create 和 thr join 命令,创建 MESH 和加入网络。 左边创建了一个 25 号信道且 PANID 为 0xea58 的网络,右边 join 进了这个 PANID 网络。这个 shell 还保 留了一些基本的网络命令,类似 linux,如果有 linux 基础的,应该不会陌生。输入 ifconfig 看看: 返回目录 恩智浦 KW41 微控制器设计大赛作品集 30 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 查看到各自的网络接口参数,128 位 IPv6 格式。互 ping 一下,可以连通。 专门了解了一下 IPv6 的格式,128 位划为 8 组 4 位十六进制数,用冒号连接。关于前导零压缩法、双冒号法, 其实就是排头的 0 不用管,全 0 直接忽略。测试一下,果然如此,如图所示。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 31 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 Thread 学习资源和学习路线 本节内容来源论坛资深网友 lyzhangxiang 分享帖:点此查看 本节相关内容推荐阅读: 一起来玩 thread + 用 coap 点灯(参赛网友 damiaa) 关于 openthread 再也不用担心网路没法玩了(论坛网友 lyzhangxiang) 继续讨论关于 Border Router(论坛网友 lyzhangxiang) 运行 openthead 的步骤(论坛网友 lyzhangxiang) USB Dongle 抓包 wireless_uart(FRDM-KW41Z) 测试(参赛网友 gs001588) 值论坛举办 KW41 大赛,有幸体验一下目前最前沿的无线协议栈 Thread,之前对该协议的认识仅停留在 文档相关,未对实际厂商所做的 stack 有过了解,目前主要是恩智浦和 SiliconLabs 在这方面投入比较大,其 他不多。 下载了官方的 sdk 看了一下,基本比较全面,该有的资料都在里面,由于这个东西体系比较大,所以需要 花更多的时间进行学习,尤其是需要对 IPv6 相关的进行了解,实际 Thread 商用离不开这些,希望这个东西 能推动 IPv6 的普及。 先列一下重点内容,核心是 SDK,所有的资料都在里面(如未下载,请参考第一章的开发资源下载和 SDK 生成这部分内容进行下载)。 重点的三个文档和几份代码 Kinetis Thread Stack Demo Applications User’s Guide.pdf Kinetis Thread Stack API Reference Manual.pdf Kinetis Thread Host Control Interface Reference Manual.pdf end_device/low_power_end_device host_controlled_device router_eligible_device 返回目录 恩智浦 KW41 微控制器设计大赛作品集 32 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 ble_thread_host_controlled_device ble_thread_router_wireless_uart 最后是关于 BR 相关的参考这个文件夹下的 README,非常重要! host_sdk HOWTO-SNIFFER-LINUX/HOWTO-SPI/README 看这些基本上就够了,开发可选择的 IDE 比较多,当然用 GCC 也是非常不错的选择适合 MAC 或者 Linux 用户。我选 择自己熟悉的 IAR 这个一般对最新的板子或者芯片支持都是非常快的,比较灵活。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 33 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 以上简单测试了下,请按照文档 Kinetis Thread Stack Demo Applications User’s Guide.pdf 搞清楚这 些 demo 的意图。再结合相关的 code 进行学习,相信能搞清楚恩智浦提供了什么给我们使用,已经非常非常 好了,该有的都有。 记得自己以前还折腾过 Wireshark 的抓包器,那叫一个累,自己写插件,自己写 sniffer 的固件,现在恩 智浦都提供了。 所以站在巨人的肩上,学习成本低多了,另外这个自带的 shell 框架也非常可以,大家可以借鉴学习。很 多好多东西,比如那个 xml_fsci 非常灵活,这种思维要强化到自己的工作中去。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 34 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 Thread 获取入网的节点地址列表方法 本节内容来源 KW41 参赛网友 allenliu 分享帖:点此查看 Thread 入网的时候会通过邻居发现(neighbor discover)来配置自身地址, 入网后第一件事是要获取设 备的地址列表才能继续下一步操作比如开始硬件控制。 Thread 地址列表是通过 THR_GetNeighborTable 来得到的, 测试时可以用 "thr get neighbors" 来获取 地址列表。流程如下: 1. 编程 FRDM-KW41Z x 2 2. 分别 putty 到两块板上 3. 板 A 输入 thr create 创建网络 4. 板 B 输入 thr join 加入网络 5. 板 B 加入后再板 A 输入”thr get neighbors" 来获取地址列表 6. 通过 getnodesip 也能够得到不包括自身的邻居节点列表 7. 通过 ifconfig 可以得到自身地址, 16 位地址标记位(ML16) 注:也可以通过板上的硬件按钮来创建和加入网络 返回目录 恩智浦 KW41 微控制器设计大赛作品集 35 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 在 RaspberryPi 上部署 KW41Z TUN/TAP 本节内容来源 KW41 参赛网友 ljj3166 分享帖:点此查看 本节相关内容推荐阅读 在 RaspberryPi2 部署 KW41z TUN/TAP 问题,已解决(参赛网友 damiaa) TUN/TAP 其实是一个虚拟的网络设备,纯软模拟。玩过 Linux 的应该知道,Linux 有个很好玩的梗,USB 设备可以虚拟成一个网 络设备。 KW41 的 Thread 中有 Framework Serial Connectivity Interface (FSCI) 和 Thread Host Control Interface (THCI) ,字面上 大概意思就是整一个串行通信接口 (USB、UART、SPI),可以将 IP 数据包封装 / 解包成串行数据,如果有一个带 U 口的路由器,加上 软件 , 一块 KW41z 板,就能完成边界路由器的功能。 早在几年前论坛活动中,就有论坛大神把 Contiki 移植到 R21, 借助 Contiki 中的 Slip 协议,搭配 OPENWRT 路由器和 tunslip6 软 件完成 border router。 这次恩智浦的资料很给力,源码中就包含了 border router 的 例 程, 同 时, 还 公 布 了 Linux OS 上 位 机 软 件 的 源 码, 它 们 就 在 ..\SDK_2.2_FRDM-KW41Z\tools\wireless\host_sdk\hsdk\demo。 基于以上资源,试着在树莓派上部署了一版。 KW41 侧的工作 两块板分别烧固件,一个是 thread_host_controlled_device,理论上 hybrid 下类似的工程也行,另一个 是 thread_router_eligible_device,理论上其他的也行。尤其需要注意第一个工程中 source\config.h 文件中 #define THR_SERIAL_TUN_ROUTER ,必须配置为 1 thread_host_controlled_device 的板子与树莓派搭配,另外一块板子待命。 树莓派侧的工作 1、拷上源码( ..\SDK_2.2_FRDM-KW41Z\tools\wireless\host_sdk\hsdk\demo) 返回目录 恩智浦 KW41 微控制器设计大赛作品集 36 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 2、安装依赖 apt-get install update apt-get install build-essential libudev-dev libpcap-dev 3、make 在 ..\host_sdk\hsdk,make 一次,接着 make install, 在 ..\host_sdk\hsdk\demo,执行 make、make spi,这个时候 ..\host_sdk\hsdk\demo\bin 下会生成 GetKinetisDevices PCAPTest SPITest Thread_KW_Tun 这几个可执行代码流。./GetKinetisDevice 可以查看连 接上 USB 口的 KW41 板,执行一下就能看到:NXP Kinetis-W device on /dev/ttyACM0。不同系统,端口号可 能不同。./Thread_KW_Tun 就是处理 IP 包的程序,后面再用。接着编辑一个 sh 文件,添加虚拟网络接口。 nano tun.sh 01 #!/bin/bash 02 # Create a new TUN interface for Thread interaction. 03 ip -6 tuntap add mode tun fslthr0 04 # Assign it a global IPv6 address. 05 ip -6 addr add FD01::2 dev fslthr0 06 # Add route to default address of Serial TUN embedded interface. 07 ip -6 route add FD01::1 dev fslthr0 08 # Add route to Unique Local /64 Prefix via fslthr0. 09 ip -6 route add FD01:0000:0000:3EAD::/64 dev fslthr0 10 # The interface is ready. 11 ip link set fslthr0 up 12 # Enable IPv6 routing on host. 13 sysctl -w net.ipv6.conf.all.forwarding=1 大致意思就是创建一个叫做 fslthr0 的 IPv6 虚拟网络接口 ./tun.sh 跑起来,ifconfig 看一下,就会出现以下信息 1 fslthr0   Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 2           inet6 addr: fd01::2/128 Scope:Global 3           UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 4           RX packets:8 errors:0 dropped:0 overruns:0 frame:0 5           TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 6           collisions:0 txqueuelen:500 7           RX bytes:832 (832.0 B) TX bytes:832 (832.0 B) 到这里,运行 ./hsdk/demo/bin/Thread_KW_Tun /dev/ttyACM0 fslthr0 返回目录 恩智浦 KW41 微控制器设计大赛作品集 37 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 1 [THR] Set 802.15.4 channel          OK! 2 [THR] Create Network                OK! 3 [MESHCOP] Start Commissioner        OK! 4 [MESHCOP] Add Expected Joiner       OK! 5 [MESHCOP] Sync Steering Data        OK! 另外一块板子在串口 join 一个 thread 网络,ifconfig 出现如下信息。 1 Interface 0: 6LoWPAN 2     Link local address (LL64): fe80::2995:f51:69ce:4087 3     Mesh local address (ML64): fd1d:b758:634f:5834:d8ca:d682:6645:c052 4     Mesh local address (ML16): fd1d:b758:634f:5834::ff:fe00:1 5     Unique local address: fd01::3ead:2187:d4fe:ff70:f7db 6     Link local all Thread Nodes(MCast): ff32:40:fd1d:b758:634f:5834::1 7     Realm local all Thread Nodes(MCast): ff33:40:fd1d:b758:634f:5834::1 看到 Unique local address: fd01::3ead:2187:d4fe:ff70:f7db 了吗?和树莓派上虚拟的地址是一样的。 从树莓派 ping 了一下,能通,看样子,Border Router 离我们不远了。这个 demo 我在 Desktop Ubuntu 和树莓派上都跑通过,因此搭载 OpenWrt 的路由器应该也不在话下,可惜手头上没有,不能进一步玩耍了。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 38 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 KW41Z + RPi + OpenWRT 实现边界路由器 本节内容来源 KW41 参赛网友 ljj3166 分享帖:点此查看 上一节内容只是实现了一个 TUN 通道,还没有完成 PC 直接访问 thread 网络 node 的功能也就是实实在 在的 border router 功能,折腾了几天,终于搞定。 官方文档上完成边界路由器功能需要使用到 USB-KW41 或者 Freedom-MK64F 来实现,经过探索,发现 Freedom-KW41z + RPi + OpenWRT 路由器 ( 需支持 IPv6 DHCP) 同样也能实现,网络拓扑如下。 Freedom-KW41z —— RPi —— OpenWRT Router(CC15.05.1)                                                          |                                                 PC(win7 及以上 ) 1、Freedom-KW41z 固件准备 一个 Host Controlled Device,通过 USB 连接到 RPi,一个 Router Eligible Device 或者其他 thread 网络 终端固件,使用 uart shell。特别注意,Host Controlled Device 的固件编译前,务必使能以下几个宏 THR_SERIAL_TUN_ROUTER,位于 /source/config.h THR_SERIAL_TAP_ROUTER,位于 /nwk_ip/app/common/app_serial_tun.h SERIAL_TAP_ROUTER,位于 /nwk_ip/base/ip_media_if/ip_if_serial_tun.c 编译,烧好。 2、RPi 准备工作 同【KW41z】在 RaspberryPi 上部署 KW41z TUN/TAP ,不过要建立虚拟的 tap 管道,也就是需要执 行 /host_sdk/host/demo/make_tap.sh。在 make 之前,务必要确认 /host_sdk/host/demo/Thread_KW_ Tun.c 中的 SERIAL_TAP 宏为 1。make 后,执行 ./bin/Thread_KW_Tun /dev/ttyACM0 fslthr0 1。help 一 下 Thread_KW_Tun,后面带参数 1,会使 host 单板 factory 复位后建立 thread 网络。 实测 factory 复位后建立的网络,node 根本无法 join,不知道是不是 demo 的 bug,我的解决办法是, 执行 ./bin/Thread_KW_Tun /dev/ttyACM0 fslthr0 1,控制台打印 factoryreset ok 后,ctrl + c 取消,再执行 ./ bin/Thread_KW_Tun /dev/ttyACM0 fslthr0,这个时候就能顺利建立 thread 网络了。然后在 node 的 shell 中, thr join。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 39 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 PC 机在 OpenWRT 上获取的 IPv6 地址,不是全球地址!后面怎么从外网接入…… node 接入 thread 网络后获得的 IPv6 地址,还是局域网地址…… 局域网 ping 一下 node,可以通。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 40 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 node 来 ping 一下 PC,可以通。至此,边界路由器的功能就实现了。 怎么管理或者操作 thread 网络中的 node 呢?毫无疑问,Coap、server、client 都有超级轻量级的协议, 和 http 有些类似,也是 get、post,适合小微型设备使用,使用 firefox,安装 coap 插件才能访问。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 41 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 get 到 node 的温度传感器数据 返回目录 恩智浦 KW41 微控制器设计大赛作品集 42 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 基于 FRDM-KW41Z 的 Thread 信号测试 本节内容来源 KW41 参赛网友 allenliu 分享帖:点此查看 测试环境 远程节点 A 采用移动电源供电,节点刷 router_eligible_device 程序。 本地节点 B 通过 USB 连接 PC,节点刷修改后的 router_eligible_device 程序, 程序修改如下: shell_ip.c 插入 #include “phy.c”,并且在 2633 行插入 shell_printf(“%d\n\r”, PhyGetLastRxRssiValue());       /* coap rsp from : */       shell_printf(“coap rsp from “);       shell_printf(“%d\n\r”, PhyGetLastRxRssiValue()); 这样可以在串口同时输出 RSSI 值。 测试程序使用自己编写的串口程序不断访问节点 A 获取温度数据, 数据访问间隔为 500ms,记录下出错 的数目。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 43 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 测试 1: 节点之间距离 5 米, 中间隔着 30CM 承重墙的 RSSI 大概 200 左右(255 最大),未发现丢包。 测试 2: 节点之间距离距离 12 米左右, 设备放厨房最内测, 关上厨房门(手机 WIFI 信号 1 格多点), 测试显示 RSSI 大概 170 左右, 丢包率在 10% 左右。 总结: 在 2 个节点的 Thread 网络下通信还是令人满意的,在实际使用情况下路由和设备之间的距离一般不会那 么远,能过满足大部分情况需求,不过开发板采样的是 PCB 天线中性能比较好倒 F 天线, 而实际设备由于体 积方面的原因,天线面积不会那么大,实际开发的产品很可能达不到这种效果。 测试程序点击此处,可前往原帖下载。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 44 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 BLE 简介及例程编译与测试 本节内容来源 KW41 参赛网友 jj1989 分享帖:点此查看 本节相关内容推荐阅读: 官方 SDK 蓝牙例程的烧录和测试(参赛网友 zhaogong) 基于 FreeRTOS 的 I2C 通信任务 +BLE 调通(参赛网友 liyuyao001) 恩智浦的 BLE 协议栈软件架构与应用层代码分析 (KW40Z)(参赛网友 mars4zhu) 本文将通过一个官方自带的速度、踏频例程,简单演示一下 BLE 的应用。 例程导入 官方 SDK 提供了很多 BLE 的例程,使用 MCUXpreeso 可以很方便导入想要的例子。如图 1: 图1 返回目录 恩智浦 KW41 微控制器设计大赛作品集 45 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 参考手册 在查看代码前,建议先阅读一下官方关于 BLE 部分的在线帮助文档。文档对 BLE 协议做了简单介绍,每 个例程也有对应的说明。文档位于 KW41Z 主页 ---> 文档 ---> 支持信息 ( 点此直接进入),如图 2: 图2 编译、运行 编译并烧写代码到开发板,具体怎么操作,请参照本书的相关章节,不再赘述。 程序跑起来之后,板子上面的 LED 狂闪,手机蓝牙搜索不到信号,什么问题?难道这个跟 Nordic 一样协 议栈需要单独烧录。不急,先来看一下在线帮助文档。原来需要按一下按键 4,BLE 才会广播。如图 3 所示。 图3 按下按键 4,只有红色 LED 在闪烁,此时手机已经可以搜索到信号,打开官方的 APP―Kinetis BLE Toolbox,选择 Cycling Speed and Cadence ,点击名为“FSL_BLE_CSCS”的设备进行连接,什么,配对需 要密码?好吧,密码是六个 9。成功连接后,红色 LED 常亮。此时可以看到界面显示了速度、踏频以及轮子周 长。点击轮子周长旁边的设置按键,可以设置轮子周长。并且速度每秒变化一次。如图 4 所示。 图4 返回目录 恩智浦 KW41 微控制器设计大赛作品集 46 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 接下来使用 LightBlue 看一下蓝牙具体信息。设备包含三个服务:Cycling Speed and Cadence 、Battery Service 和 Device information。如图 5、6 所示。 图5 图6 UUID:1816 即为 Cycling Speed and Cadence 。可以看到有四个特性。分别为 CSC Measurment、CSC Feature、Sensor location 和 SC Control Point。更加详细的信息请参考蓝牙技术联盟的相应规范。 在使用 IOS 蓝牙进行过配对连接之后,开发板重新上电,蓝牙无法连接,总是失败。解决办法是在 IOS 系 统设置里忽略该设备,即删除绑定信息。分析应该是之前的绑定后,手机端存储了相关绑定信息,而开发板没 有将信息保存起来。导致再次连接时,加密启动失败。 上面通过一个速度、踏频蓝牙例程,简单介绍了一下低功耗蓝牙。下面说说 BLE 相关的安全问题(本部 分内容来自 jj1989 分享帖:KW41Z 之 BLE 安全)。 在之前的速度、踏频例程中,当手机连接开发板时,需要 输入密码(6 个 9)。一开始我是不知道密码的。感觉很奇怪啊,一个速度、踏频,搞个密码干嘛,也没有什 么需要加密的数据。 接下来通过去掉这个输入密码的操作,来简单聊一聊蓝牙加密问题。 配对 未提供安全性的两个设备如果希望做一些需要安全性的工作,首先必须彼此配对。配对分三个阶段:配对 信息交换、链路认证、密钥分配 1. 配对信息交换 确定设备的输入和输出能力以及其他配对信息。 输入输出能力有以下 5 种: 返回目录 恩智浦 KW41 微控制器设计大赛作品集 47 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 无输入无输出 仅有显示屏 显示屏 + 选择“是 / 否” 仅有键盘 键盘 + 显示屏 2. 链路认证 利用配对请求和配对响应消息所携带的信息,两个设备确定适合的配对算法。 如本例程中,手机端输入的数值 999999,被作为临时密钥(TK)。然后设备各自生成一个随机数,并基 于该随机数、TK 值、已知的配对值(设备地址)、配对请求和响应消息中的参数计算一个确定值。 $$ 确认值 =E_{TK}( 随机数 | 配对请求和响应消息 | 设备地址 )$$ 随后两个设备交换随机数和确认值。若确认值与随机数不匹配,设备将发送配对失败消息终止配对。如果 匹配,随机数将用于计算短期密钥(STK),用于加密链路。 3. 密钥分配 利用 STK 加密后,进行所需密钥的分配 分配的密钥包含以下几种: 长期密钥(LTK) 身份解析密钥(IRK) 连接签名解析密钥(CSRK) 4. 绑定 将密钥及相关身份信息保存到安全数据库中。 两个设备在最初配对时,会交换绑定信息,以便知道对方是否保留了绑定信息。当配对完成后,如果其中 一个设备不保存信息,重新连接后,只有一个设备拥有 LTK,会导致启动加密失败。主机将试图再次配对。 代码分析 app_config.c 文件中,变量 gPairingParameters 的定义如下。 /* SMP Data */ gapPairingParameters_t gPairingParameters = { .withBonding = gAppUseBonding_d, .securityModeAndLevel = gSecurityMode_1_Level_3_c,//gSecurityMode_1_Level_1_c .maxEncryptionKeySize = mcEncryptionKeySize_c, .localIoCapabilities =gIoDisplayOnly_c,// gIoNone_c 返回目录 恩智浦 KW41 微控制器设计大赛作品集 48 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 .oobAvailable = FALSE, .centralKeys = gIrk_c, .peripheralKeys = (gapSmpKeyFlags_t)(gLtk_c | gIrk_c), .leSecureConnectionSupported = TRUE, .useKeypressNotifications = FALSE, }; 这 里 gAppUseBonding_d 为 1, 表 示 支 持 绑 定。 安 全 等 级 为 Mode 1 Level 3 : Encryption with authentication. 输 入 输 出 能 力 为 仅 有 显 示 屏。 显 然 开 发 板 没 有 显 示 屏, 用 户 没 办 法 知 道 密 码。 定 位 到 gAppUseBonding_d 定义处,位于 app_preinclude.h 文件中,如下: /*! Enable/disable use of bonding capability */ #define gAppUseBonding_d 1 /*! Enable/disable use of pairing procedure */ #define gAppUsePairing_d 1 /*! Enable/disable use of privacy */ #define gAppUsePrivacy_d 0 #define gPasskeyValue_c 999999 #if (gAppUseBonding_d) && (!gAppUsePairing_d) #error “Enable pairing to make use of bonding” #endif 这里的 gPasskeyValue_c 即为配对时输入的密码。 好了,现在可以尝试去掉输入密码的操作,直接连接 了。首先关闭配对和绑定,然后修改安全模式等级和输入输出能力,如注释所示。 重新编译烧录代码并运行, 现在手机可以直接连接,不用再输入密码了。 关于 BLE 的安全部分,内容还是比较多的,这里只做了一个大概的介绍,其实我也没完全搞懂,感兴趣 的朋友可以去看看蓝牙官方的手册。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 49 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 基于 MCUXpresso 工程分析一下 BLE 项目结构 本节内容来源 KW41 参赛网友 shinykongcn 分享帖:点此查看 本节相关内容推荐阅读: 【KW41Z】蓝牙串口体现(参赛网友 dvd1478) 下面基于 freertos 版 BLE Beacon 项目简单的分析一下 BLE 项目结构 。 项目导入之后 , 如上图所示 . BLE 上层的代码都放在了 source 目录下,那么我们应该从何看起了?这里我 简单的画了一下结构组成 返回目录 恩智浦 KW41 微控制器设计大赛作品集 50 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 cmsis 属于 arm 规定的一些东西。 驱动层提供外设驱动,这里我参考恩智浦官方的文档,把 rtos 放在了这层 , 因为它同 driver 一起为上层服务。 Framework 层比较有意思,他对 OS 和 Driver 都做了一层封装,而且很有意思,后面详细说明。这里 bsp 也为它提供服务,也许应该将 bsp 放在下面。 BLE 协议栈这部分基本都是通过静态 lib 库提供 .a 文件,并不开源。 最后就是我们需要编写的应用代码了,包括比如数据采集,ble 协议相关实现等。 接下来通过代码走向再具体一下。先从 Framework 开始吧,因为 main 函数在这里面。 这一层抽象了很多东西,基于 driver 封装的一些功能,方便使用。LED 提供了开关、闪烁等功能。 keyboard 用于管理按键。osa 抽象封装了 os 层,前面说了,由于应用代码是基于 framework 之上的,所以 如果你更换新的 os,那你应用层的代码可以不需要做什么修改。从 main 里面的代码可以知道,虽然整个工程 使用的 freertos 系统,但是我们却不直接调用 freertos 的任务创建方法。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 51 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 main 函数做完 hardware init 之后,就直接去跑任务了,流程是这样的:main ->startup_task->main_ task。这里就正式进入应用代码了,也就是项目的主任务,beacon 工程的所有功能都在这里面实现。包括用 户实现的 BLE service & characteristc,这些代码都放在了 source 目录下,如下图所示。 最后再说一下 ble stack,相关的有两个部分:lib 库和公开接口。 在 bluetooth 目录下还实现了 3 个 service,都放在 profile 文件夹下,这个可以说不属于 ble stack 的内容, 而是 ble 应用层,也许放在 source 目录下会更合适。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 52 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 测试 KW41Z Bluetooth HID 例程的心得 本节内容来源 KW41 参赛网友 littleshrimp 分享帖:点此查看 KW41Z 的软件包里提供了很多例程,Kinetis 的单片机接触不多,以前用过 K40,K51 对它们的印象不太 好,当时 K40 的例程使用起来感觉挺不方便的,这次抱着试试看的态度尝试一下 KW41 的 HID 例程,实现 的功能是一个蓝牙鼠标。因为 KW41 是一颗多协议无线 MCU,C:\NXP\MKW41Z_ConnSw_1.0.2\boards\ frdmkw41z\wireless_examples 目录下有很多无线相关的例程。 打开 bluetooth 文件夹也可以看到很多例程,这些例程还是比较全的,基本上我能想到的都包括在内了。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 53 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 打开 hid_device 文件夹可以看到里边有 3 个工程,2 个操作系统 一个裸机能在例程里看到 uCOSII 操作系 统还是头一次。 打开文档 C:\NXP\MKW41Z_ConnSw_1.0.2\docs\wireless\Bluetooth\BLE Demo Applications User's Guide.pdf,找到 5.6 HID Device (Mouse) 看到有这样一句话。 原来需要按一下开发板上的 SW4 按键,按一下后七彩灯不亮了,这时手里出现 FSL_HID 设备点击输入 999999 密码后顺利连接,然后手机就多了一个正在画框框的鼠标指针。 这次调试 KW41 例程的感受不错,例程多、操作方便、文档给力。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 54 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 BLE 的 Android 上位机开发 本节内容来源 KW41 参赛网友 zwq1489 分享帖:点此查看 赶着五一假期看了看 KW41 里面 BLE 这块的 SDK,发现恩智浦提供的 example 里面用到的 UUID 基本都 是 SIC 组织规定的 service 和 characteristic,而且用的传感器数据基本都是随机数(毕竟板载资源有限嘛,需 要大家再根据自己的项目拓展开发啦)。 那既然恩智浦已经写好了包含 service 和 characteristic 的数据库,下位机主要的工作量就在重新定义自 己的 service 和 characteristic,还有采集数据和逻辑控制,这些都不是我这篇帖子要讲的,因为这些对论坛里 的大神们绝对是小菜一碟。上位机是人机交互的主阵地,我打算基于 Android 平台,结合 KW41 的 BLE 实现 双向通信,今天先把自己开发过程中的遇到的问题跟各位坛友分享一下。 开发平台:Android Studio,这个工具是 Google 的亲儿子,以前用过 MyEclipse,不过现在已经不用了。 网上有个开源包 BleLib,个人感觉非常好用,也是今天主要推荐的主角,通过这个包可以省去很多复杂的 工作。 在 build.gradle 中插入这行代码: compile 'com.junkchen.blelib:blelib:1.2.3' 然后编译工程,发现报错了! 看了看原来是安卓最低版本的设定问题,在 Android4.3(API18)平台以上才开始支持低功耗蓝牙中 央设备角色,楼主习惯性的用 4.0.3 版本,自然是不行的啦。解决办法就是还在刚才的 build.gradle 中,把 minSdkVersion 提高到 18 以上就可以啦! apply plugin: ‘com.android.application’ android { compileSdkVersion 25 返回目录 恩智浦 KW41 微控制器设计大赛作品集 55 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 buildToolsVersion “25.0.0” defaultConfig { applicationId “com.android.winkey.bletest” minSdkVersion 18// 修改这里 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.1.0' testCompile 'junit:junit:4.12' compile 'com.junkchen.blelib:blelib:1.2.3'// 在这里添加开源包 } 最后,贴一下下使用这个 BleLib 库进行 Android 低功耗蓝牙 Ble 的开发步骤: 添加 BleLib 库依赖 绑定 BleLib 服务 初始化操作 打开蓝牙 返回目录 恩智浦 KW41 微控制器设计大赛作品集 56 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 扫描 Ble 设备 连接 Ble 服务 读写 Ble 特性和接收 GATT 通知 下面深度聊聊 Blelib 这个包怎么用(本部分内容来自 jj1989 分享帖:BLE 的 Android 上位机开发上)。 1、声明对象 比较简单,这个 mBleService 是核心。 BleService mBleService=null; 2、绑定 BLELIB 服务 这里涉及到两个函数。其中 doBindService() 是用来绑定 BLE 服务的,这个在初始化建立蓝牙连接的时候 用到;doUnBindService() 是用来解绑服务的,在关闭的时候调用。 private void doBindService() { Intent serviceIntent = new Intent(this, BleService.class); bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE); mIsBind=true; } private void doUnBindService() { if (mIsBind) { unbindService(serviceConnection); mBleService = null; mIsBind = false; } 3、打开蓝牙扫描设备 这个要介绍一下 serviceConnection。 private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBleService = ((BleService.LocalBinder) service).getService(); if (mBleService != null) setBleServiceListener(); if (mBleService.initialize()) { if (mBleService.enableBluetooth(true)) { 返回目录 恩智浦 KW41 微控制器设计大赛作品集 57 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 mBleService.scanLeDevice(true); Toast.makeText(MainActivity.this, “Bluetooth was opened”, Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(MainActivity.this, “not support Bluetooth”, Toast.LENGTH_SHORT).show(); } } 细心的网友肯定发现了,serviceConnection 就是 doBindService() 里面调用的东西,通过重写 ServiceConnection() 实例化 mBleService,并且判断设备是否支持蓝牙,然后开始扫描 BLE 设备。 观测 Android 是否还在扫描蓝牙设备,可以用 mBleService.isScanning() 函数,返回 true 是仍在扫描,false 是扫描完毕。 4、设置各种回调函数 在 serviceConnection 里面有个调用:setBleServiceListener(); 这个是核心的核心,各种 Scan、Connection、 Services、Characteristic 什么的,重要的信息都在这里。接下来的内容来自 zwq1489 分享帖:BLE 的 Android 上位机开发下。 private void setBleServiceListener() { //Ble 服务发现回调 mBleService.setOnServicesDiscoveredListener(new BleService.OnServicesDiscoveredListener() { @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { List gattServiceList = gatt.getServices(); } } }); //Ble 扫描回调 mBleService.setOnLeScanListener(new BleService.OnLeScanListener() { @Override public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) { // 每当扫描到一个 Ble 设备时就会返回,(扫描结果重复的库中已处理) Log.w(“-”,”->> 扫描到设备:”+device.getName()+”>>”+device.getAddress()+”>>”+rssi); } }); //Ble 连接回调 返回目录 恩智浦 KW41 微控制器设计大赛作品集 58 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 mBleService.setOnConnectListener(new BleService.OnConnectionStateChangeListener() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { // } }); //Ble 数据回调 mBleService.setOnDataAvailableListener(new BleService.OnDataAvailableListener() { @Override public void onCharacteristicChanged(BluetoothGatt _gatt, final BluetoothGattCharacteristic characteristic) { // 处理通知返回的数据 }); } 为了便于理解以上代码,这几个我分开解释一下。 1、mBleService.setOnLeScanListener 这个的作用是,每当 Android 扫描到一个新的 BLE 设备,便会触发这个 listener。扫描结果重复的库中已 处理,这一部分是 Blelib 里面已经处理好了的,很方便的!可以通过 device.getName() 来显示设备名。这个 跟 gatt_db.h 里面 CHARACTERISTIC(char_device_name 的字段值是一样的哦 ~ 连接这个设备,使用函数:mBleService.connect(device.getAddress()); 就好了! 2、mBleService.setOnConnectListener 这个回调函数在 connect 操作之后才会被调用,这里的参数 newState,主要有几种类型(灰常重要): STATE_CONNECTED 设备已经连接 STATE_CONNECTING 设备正在连接到 android STATE_DISCONNECTED 设备已经断开连接 STATE_DISCONNECTING 设备正在断开连接 这个 newState 的判断还是很准确的,已经测试过了,就是反应时间不是很快。。我把 41Z 复位之后,这 个大约需要四五秒的样子才能反应过来。。  不过可以借助这个作断线重连,很不错! 3、mBleService.setOnServicesDiscoveredListener 在设备 STATE_CONNECTED 之后,就可以触发 ServicesDiscoveredListener 了。BLE 设备的所有可见 services 都在 gattServiceList 里面,可以通过 service.getUuid() 取出每个 service 的 uuid 每个 service 里面 的 characteristic 可以用 service.getCharacteristics(); 取出,这样就能为每个 characteristic 执行 read write notify 操作了。如果我们在 41Z 里面设置了 SendNotification,比如 41Z 默认的电量,那么当 android 接收 返回目录 恩智浦 KW41 微控制器设计大赛作品集 59 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 到这个 Notification 时,就会触发下面要说到的。 4、mBleService.setOnDataAvailableListener 这里重写了 onCharacteristicChanged 函数,当 Notification 到达时,就会进入这个 onCharacteristicChanged 函数。函数里 characteristic 参数即是对应由哪个 characteristic 发来的通知,读 取这个值的操作是 characteristic.getIntValue 最后,附一张我的作品手机 APP 的截图。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 60 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 基于 BLE 协议和 SMAC 协议的 Wireless UART 实测对比 本节内容来源 KW41 参赛网友 bjemt 分享帖:点此查看 恩智浦 提供的 MKW41Z_ConnSw_1.0.2 开发套件中提供了两个 Wireless UART 示例程序:一个是基于 BLE 协议,一个是基于 SMAC 协议。这两种无线通信协议哪个更好一些呢?恩智浦提供的文档并没有给出相关 说明。仅说明 BLE 的服务仅提供 ASCII 字符传输,而 SMAC 则可以传输非 ASCII 字符。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 61 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 为了对比这两种无线串口的实际通信效果,我使用两块 frdm-kw41z 模块分别采用 BLE 示例程序和 SMAC 示例程序虚拟出一对无线串口。一个 frdm-kw41z 模块的串口接一台数据集设备(如下图所示),另一个 frdm-kw41z 模块的串口通过 USB 转串口模块接电脑。 串口通信速率为 57600bps,包长度从 1 字节到 255 字节可变长度,同一数据包内的字节采用中断方式连 续发送,每个数据包带有 CRC 效验,当接收端发现收到的数据包有错误时会自动要求发送端重新传输数据包。 实际测试结果是 BLE 方式比 SMAC 方式要好很多。SMAC 无论距离再近也无法避免丢包和错包的发生, 增加发送功率也无法避免,而在通信距离大于 5 米时丢包和错包会非常严重,基本无法正常使用。 BLE 方式在 8 米时无丢包和错包情况,通信非常稳定,事实证明 BLE 的示例在 frdm-kw41z 模块层面是 完全支持非 ASCII 字符的,可以实现串口的无线透明传输。只是配套的手机应用不支持 ASCII 字符而已。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 62 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 zephyr 的 MCUXpresso 攻略 本节内容来源论坛网友 freebsder 分享帖:点此查看 本节相关内容推荐阅读: 基于 KW41 跑 zephyer (论坛网友 freebsder) 一直有朋友问 eclipse(及其各种修改版)是怎样搞开发的。这个问题好庞大,只能以点带面的指指。我 一直挺推荐在可行的情况下用 eclipse(及其各种修改版,也包括 mcuxpresso)开发单片机,工欲善其事, 一个现代 IDE 可以很大程度上帮助开发者,java 虚拟机的效率完全可以被机器性能抵消,不要再被 10 年前的 观念禁锢。 MCUXpresso 的一个“卖点”是 jlink 插件是恩智浦官方出品。虽然不知道和社区版有什么差异,但是官 方版应该和自家的系统配合最轻松。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 63 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 zephyr 在 linux 上的开发支持是最好的,如果在 windows 上开发是很折腾人的一件事,十分折腾人,相 信我。所以一定要折腾 zephyr 最好还是在 linux 下面。 除了把 zephyr 脱下来,其他额外不需要安装什么。MCUXpresso 自带了编译器,也就不用装个新的。我 的安装目录是 /Applications/MCUXpressoIDE_10.0.0_344/ide/tools 1、导入项目,import 返回目录 恩智浦 KW41 微控制器设计大赛作品集 64 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 2、打开 make 视图 返回目录 恩智浦 KW41 微控制器设计大赛作品集 65 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 3、新建 make target 返回目录 恩智浦 KW41 微控制器设计大赛作品集 66 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 4、设置 mcu 环境,要找 nxp mcu tools,否则恩智浦的环境不太能用。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 67 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 5、双击刚才建立的 make target,编译 zephyr,当然也可以在命令行自己搞 6、编译之后就可以在 quickstart panel 或者工具栏用紫色爬虫进行调试了。我这边用的 jlink。选那个名 字很明显的 elf。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 68 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 7、首次的错误处理,因为我们是建立的手工工程,所以需要让 eclipse 不要每次 debug 的时候自动用它 的工程方式 make。 8、然后再用紫色爬虫进行 debug,O 了。第 7 步的错误只在第一次处理一次就可以。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 69 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 成功将华为 LiteOS 移植到 FRDM-KW41Z 上面 本节内容来源 KW41 参赛网友 tidyjiang8 分享帖:点此查看 最近简单学习了一下 liteos,并成功移植到了上。移植还是蛮简单的,只是简单适配了下 UART、LED 和 KEY。有兴趣的朋友可以玩一下。 (1)移植后的代码已托管到 github:点此进入查看 (2)所使用的 IDE 是 IAR,工程所在路径是 : PortingContest/PortingContest_FRDM-KW41Z_tidyjiang8/projects/FRDM-KW41Z-IAR 直接用 IAR 打开工程文件即可。注意,我使用的 IAR 版本是 8.0。 (3)移植过程的文档请参考:点此查看 返回目录 恩智浦 KW41 微控制器设计大赛作品集 70 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 三、收汁出锅 开发大赛获奖作品展示 返回目录 恩智浦 KW41 微控制器设计大赛作品集 71 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 大赛颁奖礼的优秀作品演示视频 (点击观看) 返回目录 恩智浦 KW41 微控制器设计大赛作品集 72 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 远程家庭物联网关 基本信息 大赛特等奖作品 作者 ljj3166 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 家中书房工作台简直是密集恐惧症的根源,顺手拍的小角落如图所示。 家中像这样的地方还有 7 个,想一想,使用到的电源不过 5V、9V、12V、24V 几类,偶尔会使用 3.3V 来点灯。 于是想做个电源系统,能够简化这些连线,至少能够减少插排的数量,看上去整洁一些。同时想实现远程控制 这些电源输出,包括网页控制、语音控制,统统加上,看了看 KW41 特性,能够支持 Thread 网络 , 那么边界 路由是个大问题 , 简单看了一下文档,在 K64 和 KW41-usb 平台上也能支持边界路由,文档比较丰富,还有不 少 demo。后来自己捣鼓了一下,树莓派搭配上 KW41z-Freedom 也能跑起 Border Router。一个接入互联网 的 Thread 网络,摇身一变,变成物联网。用手机、语音去控制这些电源输出,即时控制单板掉电掉线,也能 够恢复到上一次输出状态。KW41 的低功耗特性,使其更加具备物联网的特点。 软硬件设计思路 硬件方面比较简单,一块 FRDM-KW41 加上一堆电源模块,搭配上一堆继电器,加上底板 PCB,就构成 了这个电源输出管理的单板。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 73 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 软件方面,单板一侧主要还是依靠恩智浦官方的 DEMO,弄清楚基本的 Thread 通信及数据处理过程,开 启需要的外设 IO,修修补补就用上了;边界路由一侧,因为搭配了树莓派,写了一段 python 代码,完成互联 网数据向 Thread 网络终端转发的功能,主要是依靠 coap 协议。 硬件连接图 系统框图 返回目录 恩智浦 KW41 微控制器设计大赛作品集 74 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 关于语音控制,之前玩微信设备的时候,申请过一次个人公众号,能正常交互数据,这次想直接用,发现 不允许个人接入,只允许企业级接入。 原理图 返回目录 恩智浦 KW41 微控制器设计大赛作品集 75 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 作品源码:点击前往作品网络提交帖内下载 作品功能演示 演示中主要的工具如下。 演示视频 (点击观看) 大赛 DIY 过程中分享的帖子 理解有限,写不了什么高深东西,简单记录了一下活动过程。 2017 年 5 月 3 日 开箱建网谈理想 2017 年 5 月 8 日 在 RaspberryPi 上部署 KW41z TUN/TAP 2017 年 5 月 22 日 实现边界路由器去撸灯 返回目录 恩智浦 KW41 微控制器设计大赛作品集 76 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 2017 年 7 月 5 日 公网访问 Thread 网络终端去撸灯 2017 年 7 月 9 日 撸一波灯 2017 年 7 月 18 日 撸了块 PCB 作品总结和展望 活动时间比较短,想完全搞明白这些个复杂的协议和原理,比较困难,目前仅仅是能够简单用起来,做了 这么个小作品,手上也还有一个 KW41 的小模块没有充分利用起来。 谈物联网,万物互联嘛,低供电甚至不供电才是王道,后面有时间的话,体验一下 KW41 的低功耗特性, 用这个小模块做个太阳能供电的环境监测单板,把树莓派和 KW41 的边界路由功能充分利用起来。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 77 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 灾害救援车的高速数据传输及动态监控 基本信息 大赛一等奖作品 作者 w562601331 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 当初的想法是在救援安全领域,设计一个火警救援车,用于灾难中的搜救,但是拿到板子发现并不是那么 容易的事情。火警救援现场状况复杂,路况难以捉摸,很难通过简单的控制就可以达到避障和搜救的目的,自 己进行了基础设计。传感器和算法还需要后续研究。 主要实现的功能是实时的远距离监控,使用了 5.8g 的模拟图像传输,实际测试最远距离在 600 米左右。 在实时图像传输的同时,使用恩智浦的 KW41 设计了基于 BLE 的蓝牙控制程序,实现救援车的控制。该控制 在 windows 系统和 Android 系统上均可以实现,并做了相应上位机界面。本来计划用电脑的蓝牙直接连接 BLE 以实现救援车控制的,但是由于之间没有接触过 BLE 的相关知识,还有手机端 APP 没有开源,根据官方 的 API 也没有短时间找到思路,所以使用 PL2303 芯片做成了蓝牙转串口,然后通过两个板子之间的蓝牙配对, 实现串口控制救援车的各种运动。 软硬件设计思路 硬件方面,车体如图 该车体使用了减速电机作为动力。减速电机是在普通的高转速直流电机的基础上加上减速箱,从而实现大 扭矩、低转速的目的。使用减速电机的目的是为了克服复杂崎岖地面的动力不足的问题。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 78 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 驱动模块使用的是通用的 L298N 电机驱动。 添加了摄像头和 5.8G 图传模块,实现了实时图像的传输。 软件方面,Windows 上位机使用的是 Matlab 的 GUI 编写的,Matlab GUI 可以方便对串口进行控制。并 且在控制的基础上将视频采集融合在一起。上位机界面如图: 该界面是使用 matlab2012b 编译的,不同的版本不一样,电脑上需要 matlab 才能运行。 Android 上位机使用的是 Android Studio 开发的,自己接触这方面时间不是很长,所以能力有限,时间 来不及只能调试成这个地步。后期将会继续研究研究。Android 开发得对 Java 和 Android 的各种控件和服务 得有一个清晰的认识。该 app 实现了手机 OTG 连接 PL2302 转串口的功能。官方已经取消了 pl2303 旧版芯片 的支持。官方开源源码也没有,只能自己写了。app 界面如图: 返回目录 恩智浦 KW41 微控制器设计大赛作品集 79 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 下位机软件方面,对蓝牙发送到下位机的数据流做了解析,从而判断上位机的指令,通过 PWM 方式来实 现电机的转速控制,左右转向的功能。 原理图 自己实现的主要是软件方面,硬件原理图就没有什么了。主要过程是简单的杜邦线连接焊接什么的。这里 放上整体结构图如下: 作品源码:点击前往作品网络提交帖内下载 演示视频 (点击观看) 返回目录 恩智浦 KW41 微控制器设计大赛作品集 80 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 作品总结和展望 作品总体上实现了上位机通过 BLE 对下位机的控制,并且根据传输回的图像可以完成环境的观察。当然 这个作品还可以当做一个可以控制的移动摄像头,让你躺在床上就可以对家里孩子的监控之类的东西,这是后 话。 恩智浦这次只给了两块板子,如果多一些的话想通过 thread 网络实现多智能搜救车的控制,从而大幅度 提高搜救效率。不过各种传感器也必须集成到车上了。车体的协同控制、生命体征探测以及避障的实现就需要 pc 机的高性能数据处理和下位机的实现了。 android app 实现还不完整,这个自己非计算机专业学起来速度也是很慢。也怪自己抽不出更多的时间来 了。有机会的话后期继续研究努力。本次大赛自己还是学到了很多的东西,自己的见识、理论知识、还有技能 都得到了提高。最后特别感谢 eeworld 还有恩智浦举办的活动。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 81 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 观赏鱼自动无线喂食系统 基本信息 大赛一等奖作品 作者 allenliu 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 养鱼的人都会遇到一个问题就是出差或旅游后鱼没人喂食,回来后可能都饿死。现在市场上有许多自动喂 食的产品,比较常见的是通过旋转饲料盒来控制的(下图左),还有一种是通过喂食蜗杆来把饲料挤压出来的(下 图右)。 这些产品都存在一个问题就是设置繁琐,换电池后需要重新设置喂食参数, 喂食量无法随意控制等。本设 计实现喂食器远程控制功能,实现随时随地自由控制,用户可搭配摄像头来根据情况来投喂。 软硬件设计思路 硬件设计 产品使用了 2 个 KW41Z 模块, 一个用于连接网关, 另一个用于喂食器控制。UART_RX 和 UART_TX 连 接到 linux 核心板实现 Thread 网络的控制,喂食器模块使用一个 PTA 管脚控制 NFET 实现电机的控制。喂食 器模块电源为 3 个 1.5v 电池串联也就是 4.5v, 经过 LDO 降压至 3.3v。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 82 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 图 1 KW41Z Host Controlled 图 2 KW41Z 喂食器节点 返回目录 恩智浦 KW41 微控制器设计大赛作品集 83 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 图 3 喂食器连接 图 4 网关模块连接 软件设计 喂食器节点基于 REED 固件添加控制逻辑。 网关系统采用 UbuntuCore 无线连接至局域网,linux 核心板通过 UART 连接到 KW41Z 模块,linux 和 返回目录 恩智浦 KW41 微控制器设计大赛作品集 84 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 KW41Z 之间通过 FSCI 接口实现通信。 Linux 系 统 下 创 建 TUN 虚 拟 接 口 用 于 接 收 外 部( 如 手 机 等) 请 求, 通 过 python 程 序 连 接 TUN 和 KW41Z。 作品源码:点击前往作品网络提交帖内下载 演示视频 (点击观看) 大赛 DIY 过程中分享的帖子 2017 年 7 月 5 日 Thread 获取入网的节点地址列表方法 2017 年 7 月 12 日 关于 Thread 协议若干问题 项目总结与展望 Thread 在 2017 年刚开放规范, 实际复杂度比想像的高, 加上第一次做嵌入式(FRDM-KW41Z 是本人 第一块开发板), 实际进度比预想的要慢。 Zigbee 协议一般得 1 年左右才能熟练, 本人认为 Thread 难度比 Zigbee 高, 主要难度在于 6LowPAN 以及 IPv4 和 IPv6 的连接上。大部分实际都在调试 Tun 连接上。 目前设计设计的硬件模块已经全部实现 ( 包括喂食器,linux 网关等 )。由于时间的关系项目中 app 控制还 未实现完成,app 控制有多种方案包括集成 OpenHAB,WEB 以及原生的 ANDROID 和 IOS 等。OpenHAB 以 及 WEB 是目前考虑方向,在接下来时间里(活动结束后)我会继续实现 APP 的控制。目前喂食器采用的是非 Sleep Device 方式,目前考虑到采用外接电源方式供电,可以采用休眠方式,间隔 30 秒启动检测是否有喂食 任务的方式来减少功耗。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 85 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 智能台历 基本信息 大赛二等奖作品 作者 cruelfox 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 快节奏的工作生活中人需要一些方式来提醒自己近期需要办的事情。传统的方式比如在日历上做个标记, 在办公桌显眼的地方贴字条,在记事本上列条目等等依然是有效的;而在每天使用的电脑和手机上用提醒软件 则操作和管理效率更高。将这两种方式结合起来呢?我构想了一个东西:智能台历。 既然是台历,就是摆在工作桌上能“抬头不见低头见”的物件了。于是把重要的、快要到期的提醒事项在 上面显示,更容易引起自己的注意。纸上标的东西是静态的,不能突出紧迫性,且依赖主动查看,比如没有翻 看就可能错过。电脑上、手机上的提醒,得保持屏幕开着,而且不紧迫的弹出消息提醒会干扰工作。 电子墨水屏作为电子台历的显示设备是绝配,因为显示内容不需要经常刷新,掉电又能保持显示,非常有 利于低功耗。恩智浦的 KW41Z 是一款带有多模无线通讯功能的 MCU,可以实现 BLE 与手机通信,内部 SRAM 有 128kB,低功耗模式选择多,作为电子台历的主控看起来很合适。于是我设计用 KW41Z 来直接驱动电子墨 水屏的显示,用它带的 BLE 和手机进行数据交互。 除了待办事项提醒的功能,这个智能台历还可以扩展,比如:将手机上的提醒消息发送到台历上显示;利 用 KW41Z 的 BLE 主机功能来控制其它智能家电,实现定时开启等“代管”功能;使用 KW41Z 的无线连接功 能连接其它 IoT 设备,进行数据收集显示和转发到手机。 软硬件设计思路 电子墨水屏使用 PrimeView 的 ED040SC4,分辨率为 800x600 点,就是 Kindle 2 代使用的屏。这个屏的 控制信号需要连 15 条线,直接接到 KW41Z 的 I/O 口上。 ED040SC4 除了 3.3V 数字电源外,需要 +22V, -20V, +15V, -15V 的四组高压电源,和 -1.5V 左右的 Vcom 电压。我选用了 TI 的 TPS65185 作为电源管理器件,它采用 DC-DC 和 LDO 来生成电子墨水屏需要的高压。 TPS65185 和 KW41Z 使用 I2C 接口进行通信。 因为 KW41Z 的 I/O 口少,除了连接 ED040SC4 和 TPS65185 之外就剩下几个口了。再保留 RESET, 调试 用的 SWDCLK, SWDIO,一个 UART TX 用于调试外,仅仅留下两个 I/O,留给一个按钮和一个 LED 指示灯。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 86 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 硬件设计 TI TPS65185 电源管理模块,设计了一块测试 PCB,电路图见下面。然后,ED040SC4 的 FPC 排线接口 我做了一个转接到排孔的小板,也是为了测试的。起初的设想是测试通过后再做一块 PCB 把接口和电源管理 放一起,做成可以和 FRDM-KW41Z 插在一起的板子,然而后来发现进度赶不上便没有再做 PCB,打算用实验 板搭了。 着手连接的时候才发现 FRDM-KW41Z 上的排插引出 I/O 同时也连在了板上的元件上,包括 LED、Flash、 传感器等,必须要拆掉跳线电阻才能断开。索性我就用利尔达的模块来做了,I/O 口全引了出来,只是供电的 配置不一样。 硬件最后做成了飞线搭起来的样子。电子墨水屏夹在两块透明有机玻璃板之间。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 87 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 软件设计 BLE 实现的部分,我是在恩智浦代码包中的 Heart Rater Sensor 工程作为框架,修改了来做的。当然通信 的内容完全和心率传感不一样,和 wireless uart 也不一样。我使用一个自定义的 Gatt profile, Service UUID 为 03ed6fbd-6b30-b8a5-a34c-9494a3e61882, 其中定义了两个 Characterstic 用来进行数据交互,一个是发 送提醒事项的列表索引,一个是读写提醒事项条目的内容。 手机端 App 是基于 Android 平台开发的,已实现提醒事项的创建、显示和编辑。这些条目并不保存在手机上, 是经过 BLE 连接和 KW41Z 传输的,由 KW41Z 存储和管理(目前只存在 SRAM 中)。 电子墨水屏的驱动是 GPIO 模拟时序。这部分放在一个单独的 Task 中执行,由一个 LpTimer 负责创建 Event 来切换任务。时间来不及完成整个项目,我仅做到 KW41Z 驱动电子墨水屏显示字体成功,还没有按时 间显示日历和显示提醒事项的标记及内容。 演示视频(点击观看) 项目总结与展望 返回目录 恩智浦 KW41 微控制器设计大赛作品集 88 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 这个项目做到后来,难度已经超乎我提交方案时的估计了。整个工程量确实不小,RTOS、蓝牙、JAVA/ Android 的开发我都是第一次接触,查资料摸索着干的。电子墨水屏的驱动做得很不顺利,出现了许多问题, 到最后也没有完善地实现电子书那样的显示效果(视频中看不清细节,其实那个屏内部已经有部分损坏了;关 键是掉电后屏幕会出现残影,这个问题对实用是致命的,也不知道是否那块屏本身有问题,可惜想再买一块也 淘不到)。因为显示部分的拖累,花在无线和系统功能编写上的时间不够用,最后作为智能台历的最基本功能 版勉强收工。 当然这个过程中我还是学到了很多东西,毕竟从头开始把一个自定义的 BLE 设备实现成功了,还编写出 了我的第一个 Android App,实现了手机和板子的数据交互。对 FreeRTOS 有了一些不算深入的认识,在之后 我的 DIY 中可以用到。 以后我再抽空把电子墨水屏的显示仔细研究吧,以及 KW41Z 的省电模式还需要挖掘。这个智能台历平台 还可以开发更多好玩的功能。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 89 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 基于 BLE 的智能门禁系统 基本信息 大赛特等奖作品 作者 jj1989 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 一般的门禁系统使用 RFID 技术进行刷卡识别。每次进出都需要手动刷卡操作,很不方便。而目前低功耗 蓝牙技术正在得到广泛应用,利用低功耗蓝牙技术,可实现非接触式自动刷卡。当人靠近门禁,即可自动开门, 免去了手动操作。用户携带一个蓝牙 Beacon 设备,门禁系统通过识别 Beacon 设备广播信息,进行用户身份 识别,从而解锁门禁。 软硬件设计思路 图 1 基于 BLE 的智能门禁系统框图 整个系统包括 BLE、Thread 和服务器三部分。BLE 部分主要完成身份识别,Thread 部分完成数据的上传, 服务器主要记录门禁信息。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 90 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 两个开发板,一个做主机,一个做从机。从机广播蓝牙信号,提供各种服务,其为服务的提供者,因此又 叫服务器(Server)。主机为控制中心,扫描蓝牙信号并连接到从机,相对于从机,为客户端(client)。 这里开发板 2 作为一个 Beacon 设备,一直处于广播状态。开发板 1 作为主机,处于扫描状态。当扫描到 2 的广播信号,通过 RSSI 值,可判断 2 的距离。当 2 处于 1 的有效距离范围内,1 将会触发开门等一系列操作, 这里通过 1 上的绿色 LED 来指示。当检测到 2 时,绿色 LED 点亮,否则熄灭。 这里的代码基于官方 SDK 中的 Beacon 和 HID_Host 例程。 1. 从机端 : 开发板 2 做 BLE 从机,一直广播蓝牙信号,不可被连接,称为 Beacon 设备。 基于官方 Beacon 例程, 需要修改的地方有: 修改设备地址(MAC Address) 修改广播的 UUID 说明: 1. 这里主机通过 MAC 地址来辨别不同设备,假设有两个 Beacon 设备广播相同的信息,通过 MAC 地址即 可将他们区分开来。 2. 广播 UUID 主要用于主机扫描时进行过滤。比如不是我们的 Beacon 设备广播的信息,直接忽略。 代码修改 接下来我们来看代码。 打开 Beacon 例程。 首先打开 app_config.c 文件,定位到如下代码: const gapAdvertisingParameters_t gAppAdvParams = { /* minInterval */ 800 /* 500 ms */, \ /* maxInterval */ 1600 /* 1 s */, \ /* advertisingType */ gAdvNonConnectable_c, \ /* addressType */ gBleAddrTypePublic_c, \ /* directedAddressType */ gBleAddrTypePublic_c, \ /* directedAddress */ {0, 0, 0, 0, 0, 0}, \ /* channelMap */ (gapAdvertisingChannelMapFlags_t) (gAdvChanMapFlag37_c | gAdvChanMapFlag38_c | gAdvChanMapFlag39_c), \ /* filterPolicy */ gProcessAll_c \ }; 该结构体为广播参数的设置。设置了广播间隔,广播类型,地址类型,广播信道等。Beacon 设备一直广播, 不可被连接,其广播类型为 gAdvNonConnectable_c,不可连接的广播。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 91 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 接下来定位到以下代码: static const uint8_t adData0[1] = { (gapAdTypeFlags_t)(gLeGeneralDiscoverableMode_c | gBrEdrNotSupported_ c) }; static uint8_t adData1[26] = { /* Company Identifier*/ mAdvCompanyId, /* Beacon Identifier */ mBeaconId, /* UUID */ mUuid, /* A */ 0x00, 0x00, /* B */ 0x00, 0x00, /* C */ 0x00, 0x00, /* RSSI at 1m */ 0x1E}; static const gapAdStructure_t advScanStruct[] = { { .length = NumberOfElements(adData0) + 1, .adType = gAdFlags_c, .aData = (void *)adData0 }, { .length = NumberOfElements(adData1) + 1, .adType = gAdManufacturerSpecificData_c, .aData = (void *)adData1 } }; 该结构体配置了广播数据。设备广播时,借助 Dongle 抓包可以查看到这些数据。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 92 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 其中 mAdvCompanyId 和 mBeaconId 可用于区分不同的 Beacon。这里 mUuid 为一个宏,将其值修改为: #define mUuid 0xa7,0xbf,0x42,0xa2,0xfc,0x4d,0x49,0xf4,0xb2,0x2c,0xd6,0xf7,0x39,0x12,0x28,0xbe 然后在 main_task() 函数中,注释掉 BleApp_Init() 函数,其会产生一串随机数来修改 mUuid 的值。 接下来打开 app_preinclude.h 文件,修改 MAC 地址,如下: #define BD_ADDR 0x12,0x34,0x56,0x78,0x9A,0xBC 通过以上几步简单的操作,Beacon 设备的代码就修改完成了。接下来编译烧录并运行,使用 Dongle 抓 取广播数据,看一下是否跟预期的一致。 广播数据抓包 这里使用 TI 的 CC2540 USB Dongle,结合其软件,抓取蓝牙信号。如下图: 图 2 Dongle 抓包数据 抓取的广播数据和地址与我们上面定义的一致。 话说为什么恩智浦不提供 USB Dongle 呢?两块板子都给了,Dongle 还舍不得吗?虽然开发板可以烧固 件成 Dongle,但像我这种两块板子一起使用的就尴尬了。 2. 主机端 开发板 1 做 BLE 主机,不断扫描蓝牙广播信号。 打开 HID_Host 例程,定位到 BleApp_ScanningCallback 函数中的 CheckScanEvent 函数,如下: static bool_t CheckScanEvent(gapScannedDevice_t* pData) { uint8_t index = 0; uint8_t name[10]; uint8_t nameLength; bool_t foundMatch = FALSE; while (index < pData->dataLength) { gapAdStructure_t adElement; adElement.length = pData->data[index]; adElement.adType = (gapAdType_t)pData->data[index + 1]; 返回目录 恩智浦 KW41 微控制器设计大赛作品集 93 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 adElement.aData = &pData->data[index + 2]; /* Search for Temperature Custom Service */ if ((adElement.adType == gAdIncomplete16bitServiceList_c) || (adElement.adType == gAdComplete16bitServiceList_c)) { uint16_t uuid = gBleSig_HidService_d; foundMatch = MatchDataInAdvElementList(&adElement, &uuid, sizeof(uint16_t)); } if ((adElement.adType == gAdShortenedLocalName_c) || (adElement.adType == gAdCompleteLocalName_c)) { nameLength = MIN(adElement.length, 10); FLib_MemCpy(name, adElement.aData, nameLength); } /* Move on to the next AD elemnt type */ index += adElement.length + sizeof(uint8_t); } if (foundMatch) { /* UI */ shell_write(“\r\nFound device: \r\n”); shell_writeN((char*)name, nameLength-1); SHELL_NEWLINE(); shell_writeHex(pData->aAddress, 6); } return foundMatch; } 先说一下 HID 主机例程是如何识别并连接到从机的。首先判断 UUID 类型是否是 16 位,若是则继续判断 返回目录 恩智浦 KW41 微控制器设计大赛作品集 94 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 是否为 0x1812,即 HID 服务。若是则说明匹配,主机将尝试与之连接。 接下来修改这一部分的代码,如下: static bool_t CheckScanEvent(gapScannedDevice_t* pData) { bool_t foundMatch = FALSE; uint8_t temp[32]; // 用于调试使用 memcpy(temp,&pData->data[0],pData->dataLength); // 长度判断 if(pData->dataLength == 0x1F) { //UUID 过滤 if(FLib_MemCmp(&temp[8],mUuid,16)) { //MAC 地址匹配 if(FLib_MemCmp(mac_address,&pData->aAddress,6)) { // 获取信号强度 beacon_rssi = pData->rssi; foundMatch = true; } } } if (foundMatch) { /* UI */ shell_write(“\r\nFound device: \r\n”); shell_write(“\r\nMAC Address: \r\n”); shell_writeHex(pData->aAddress, 6); } return foundMatch; } 返回目录 恩智浦 KW41 微控制器设计大赛作品集 95 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 通过一步步判断广播数据长度,UUID、MAC 地址,筛选出目标设备。当三者都匹配时,获取信号强度, 串口打印相关信息,并返回真值。这里使用 MAC 地址作为用户 ID。 接下来先编译代码并调试一下,在长度判断处打一个断点,当程序运行到断点处,看一下 temp 变量的值, 如下图: 与使用 Dongle 抓取的数据一致。 图 3 调试数据 在 BleApp_ScanningCallback 函数中,会判断刚刚的返回值,若返回值为真,说明是我们的 Beacon 设备。 然后再判断信号强度是否满足要求,即是否在有效距离范围内。为了便于测试,这里取 -30dBm。当信号强度 满足要求,则点亮绿色 LED。具体代码如下: if (CheckScanEvent(&pScanningEvent->eventData.scannedDevice)) { Gap_StopScanning(); // 停止扫描 返回目录 恩智浦 KW41 微控制器设计大赛作品集 96 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 if(beacon_rssi > -30) { Led3On(); } else { Led3Off(); } BleApp_Start(); // 启动扫描 } 大赛 DIY 过程中分享的帖子 2017 年 4 月 28 日 KW41Z 开箱及导入 SDK 的问题 2017 年 5 月 5 日 KW41Z 之 BLE(低功耗蓝牙)初探 2017 年 6 月 6 日 KW41Z 之 BLE 安全 作品源码 : 上述代码分析,只对重要部分做了简单的讲解。其它地方,如广播间隔,扫描间隔等参数的选择就不一一 分析了。具体源码:点击前往作品网络提交帖内查看。 演示视频(点击观看) 说明: 开发板 1(主机)静止不动,开发板 2(Beacon)慢慢靠近主机,距离缩短到一定范围后,主机上面的 绿色 LED 灯点亮。接下来 Beacon 慢慢远离主机,当超过一定距离后,主机上面的绿色 LED 灯熄灭。当让 Beacon 快速靠近主机又离开时,绿色 LED 不断闪烁。说明尽管 Beacon 移动很快,也能被主机迅速识别。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 97 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 作品总结和展望 本次作品为基于 BLE 的智能门禁系统,分为 BLE、Thread 和服务器三部分。由于时间原因,目前仅实现 了 BLE 部分。在 Beacon 识别过程中,主机通过广播信息过滤设备,并通过 MAC 地址来区分不同的 Beacon 设备。由于使用 MAC 地址作为身份验证,这样即使其它设备克隆广播信息,也无法通过主机的验证。但还是 存在安全隐患,即如果克隆者克隆了 MAC 地址,则主机会验证通过。因此后续仍需要做的是提高系统的安全性。 本方案中,可以再增加一个主机,即开发板 1。这里假设原先的主机为 A,新增的主机为 B。将 B 放置于上下 班必经之处,与 A 隔一段距离。上班的时候,B 先检测到 Beacon 信号,之后是 A。而下班的时候,顺序刚好 相反。由此可判断出人的行为。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 98 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 基于 KW41Z 的智能电力监测仪的设计 基本信息 大赛二等奖作品 作者 传媒学子 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 随着能源互联网概念的兴起,智慧能源系统开始陆续出现,智慧能源系统一般包括可再生能源发电系统和 原有的电力系统,通过获知能源互联网中各网络的运行现状,来优化整个网络的运行。太阳能、风能等多种间 歇型能源发电系统的大量接入,使得原有的电力网络面临着新的挑战。尤其是分布式光伏发电设备分布分散, 如何有效的测量每一个节点的工作情况,对于整个智慧能源系统的运行十分重要。而且,电力系统的自动化发 展,需要对电力网络内的各个运行节点进行有效监测,如何合理的组建监测网络,如何降低组建网络所花费的 成本,成为当前电力以及能源互联网领域中所面临的一个重要课题。 而恩智浦公司推出的 KW41Z 芯片最具特色的特点可实现(Thread)IEEE 802.15.4 和 BLE 等多种通信技 术同时工作,其中的 Thread 技术可用于智慧能源系统节点信息的无线传输,组建一个能源信息局域网络,通 过边界路由器汇总信息接入互联网或者电力管理系统,而 BLE 技术可方便电工等对监测节点进行调试或者单 独无线监测。 具体实现的功能如下: 1. 采用 KW41Z 操作电能测量芯片,结合电压电流传感器实现电能参数检测仪的制作,可实现对电力系统 的电压、电流等参数的实时监测。 2. 通过 KW41Z 的(Thread)IEEE 802.15.4 通信技术,与其它测量节点之间组建能源信息局域网。 3. 通过 KW41Z 的 BLE 技术,实现用户对监测节点的现场无线(非接触式)调试,测试阶段,可通过手机 实现与监测仪之间的双向互动。 本监测仪一方面通过 Thread 技术接入电网或者互联网中,可对能源节点进行长时间不间断的监测;另一 方面,可通过 BLE 技术进行现场非接触式调试。充分发挥了 KW41Z 这款芯片多模通信技术的特点,对于实际 的能源互联网建设具有重要的参考意义。 软硬件设计思路 整个系统的设计是依据未来能源互联网电力能源监测的基本需求上进行的。将分布式光伏发电系统等能源 返回目录 恩智浦 KW41 微控制器设计大赛作品集 99 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 系统简化为能源节点,每个能源节点采用基于 NXP-KW41Z 的智能电力监测仪进行测量,通过 thread 网络组 成面向能源互联网的监测网络。能源互联网信息处理系统,通过 Thread 通信网络获知各个能源节点的运行信息, 并且通过监测网络管控各个能源节点。使得整个能源互联网运行效率最大化。而 BLE 技术则作为监测仪工作 的辅助技术,在出现故障或者其他需要近距离调试的时候,KW41Z 所提供的双模通信技术,可保证网络测量 依据 Thread 技术正常运行的同时,通过 BLE 技术来实现近距离调试工作。电力检测仪组网工作形态的示意图 如图 2.1 所示。 电力 传输 电力 传输 能源节点1 能源节点2 能源互联网信息 处理系统 能源节点4 能源节点3 电力 传输 电力 传输 硬件设计 图 2.1 基于 NXP-KW41Z 的智能电力监网络拓扑 基于 NXP-KW41Z 的智能电力监测仪的系统框图如图 2.2 所示,主要分为以下七个模块:电力输入模块、 电压电流采样模块、ADE7758 测量模块、电源模块、KW41Z 处理器模块、Thread 通信模块以及 BLE 通信模块。 考虑到 NXP-KW41Z 主控板功能强大,因此,直接采用官方开发板。因此,KW41Z 处理器模块、Thread 通信 模块以及 BLE 通信模块则直接通过 FREEDOM 开发板来实现。因而,整个电力测量仪的 PCB 设计主要集中在 了电力输入模块、电压电流采样模块、ADE7758 模块以及电源模块的设计。在电力测量时,考虑到专用芯片 的稳定性和可靠性,决定采用专用电能计量芯片 ADE7758 来进行。另外,电力测量仪在单节点工作是使用显 示屏,而在组网测量模式下,为了让远程测量节点尽量的少消耗电能,实际组网当中不使用显示屏。 电 电压 力 电流 ADE7758 输 前端 模块 通信模块1 入 采样 接 模块 SPI Thread 口 电源 模块 KW41Z 微处理器模块 通信 模块2 BLE 图 2.2 基于 NXP-KW41Z 的智能电力监测仪的系统框图 返回目录 恩智浦 KW41 微控制器设计大赛作品集 100 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 PCB 各个模块的设计如下: 电源模块的设计:考虑到单节点测量时的便携性,设计了双途径供电电路。测量仪可以通过 220V 市电增 添开关电源进行供电,亦可通过 9V 干电池供电。电源模块的设计原理图如图 2.3 所示。 图 2.3 基于 NXP-KW41Z 的智能电力监测仪的电源模块设计原理图 电力输入模块、电压电流采样模块的设计:考虑到电压电流测量的安全性,采用电流传感器和电压传感器 进行隔离(1000:1),整个设计如图 2.4 所示。 图 2.4 电力输入模块以及电压电流采样模块设计原理图 ADE7758 测量模块的设计:这部分主要设计了芯片与 KW41Z 通讯的 SPI 接口,并预留了校准等备用接口, 如图 2.5 所示。 图 2.5 ADE7758 测量模块的设计 返回目录 恩智浦 KW41 微控制器设计大赛作品集 101 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 软件设计 软件设计的规划图如图 2.6 所示,由于 BLE 部分程序尚未调试成功,因此,暂时整个软件设计分为两个部 分:一个是单节点工作模式下电力测量仪的软件代码设计,另一个是电力测量仪在组网模式下的代码设计。 电力测量仪 电力测量 数据传输 Thread通信 BLE通信 边界路由器 节点3 节点2 客户端 图 2.6 基于 NXP-KW41Z 的智能电力测量仪软件设计框架图 其中,电力测量部分主要是采用 NXP-KW41Z 的 SPI 接口或者 GPIO 口进行编程,这里为了移植的方便, 采用 GPIO 口模拟 SPI 的方式进行编程。 单节点测量仪编程是在恩智浦提供的 drivers 基础上,编写的;具体的实施过程,见 Github 项目目录下《工 程创建流程 .pdf》。 组网(IEEE 802.15.4)测量编程是在恩智浦提供的 MSN(MyStarNetwork Demo)项目例程的基础上进 行的,将压力和电池的显示,改造为三相电的 A 相显示,A 相显示格式为 200.0V,其中气压显示的是前两位, 后边的由电池电压显示;具体的实施过程,见 Github 项目目录《代码使用说明 .pdf》。 作品源码:点击前往作品网络提交帖内下载 项目测试 电力测量仪单节点工作测试 项目完成了单节点(便携式)电力检测仪的硬件和软件设计,具体可完成单相、三相 - 四线制的电压、电 流有效值测量、三相电流不平衡度的测量等,还可对电能、功率、电压波形等电力参数进行测量(高级功能, 个人 DIY 暂未涉及这部分测量)。由于安全因素,该套硬件仅仅测量了实验室的三相四线制供电箱,测量结果 如图表 1,并且编写了相应的蓝牙手机客户端程序,该程序基于安卓客户端,但尚未完成,该部分程序亦尚未完成。 图 3.1、3.2 给出了单节点电力测量仪的硬件图,图 3.3 给出了尚未完成的蓝牙手机客户端界面示意图。 相序 A B C 实际值 (V) 测量值 (V) 237.3 237.2 236.5 236.5 236.3 235.8 表 1 交流 220V 市电有效值测量 相对误差 (%) 0.34 0.38 0.30 返回目录 恩智浦 KW41 微控制器设计大赛作品集 102 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 图 3.1 基于 NXP-KW41Z 的智能电力测量仪主界面 图 3.2 基于 NXP-KW41Z 的智能电力测量仪基础测量界面 图 3.3 测量仪 Android 客户端应用界面 ( 尚处于开发阶段 ) 电力测量仪组网工作模式下测试 在组网工作模式下,去掉了 LCD 显示屏,用恩智浦自带的 MyStarNetwork Demo.exe 程序进行显示。调 返回目录 恩智浦 KW41 微控制器设计大赛作品集 103 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 试图如 3.4 所示,实验结果如图 3.5 所示。 图 3.4 电力测量仪组网工作模式下测试实物图 图 3.5 电力测量仪组网工作模式下测试实物图 图 3.5 显示说明: A 相电压是借助 Pressure 和 Battery 实现上位机显示的; Eg: A 相测得电压为 220.5V,则 Pressure 显示 22,Battery 显示 0.5V; 图中展示的 A 相电压为 0V,视频中显示的是 0.7V,这个 0.7V 为低噪电压,可以根据不同应用情况进行校准。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 104 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 演示视频 ( 点击查看 ) 大赛 DIY 过程中分享的帖子 2017 年 5 月 4 日 项目实施规划以及 Kinetis FREEDOM 套件开箱 2017 年 5 月 18 日 开发环境搭建以及 hello world 例程体验 2017 年 6 月 18 日 串口调试过程中的小感悟 2017 年 7 月 10 日 硬件设计篇 2017 年 7 月 11 日 软件设计—GPIO 学习篇 2017 年 7 月 19 日 LCD 显示设计篇 2017 年 7 月 22 日 电力测量仪软件编程既测量仪调试篇 项目总结与展望 已经实现的功能 (1)完成了单节点(便携式)电力检测仪的硬件和软件设计,具体可完成单相、三相 - 四线制的电压、 电流有效值测量、三相电流不平衡度的测量等,还可对电能、功率、电压波形等电力参数进行测量(高级功能, 个人 DIY 暂未涉及这部分测量)。 (2)完成了双节点组网电力监测系统的搭建,利用 IEEE 802.15.4 组建通信网络,在功能 1 的基础上完成 了无线远程测量,测量网络组网等功能,为能源互联网的建设提供了一种基于 NXP-KW41Z 的嵌入式无线测量 网络的搭建方案。 尚未实现的功能 (1)BLE 与 IEEE 802.15.4 联合通信的部分,由于对 BLE 底层驱动程序以及协议了解不够,尚未完成,因此, 以上两中工作模式不能联合工作。 项目可优化的方向 (1) 将 BLE 部分编程吃透,然后整合 BLE 与 IEEE 802.15.4 到一个工程中,实现联合通信。 (2) 模仿官方的 MyStarNetwork Demo.exe 编写上位机软件,即智能电网测量系统管理界面。 (3) 模仿官方的 DEMO 板设计,将各个子系统整合到一个 PCB 板上,优化测量仪的 PCB 面积、体积。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 105 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 基于国网 DL645 协议的可蓝牙无线 抄读的智能仪表 基本信息 大赛三等奖作品 作者 常见泽 1 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 所谓智能仪表,就是应用计算机技术,通讯技术等,形成以智能芯片 ( 如 CPU) 为核心,基于国家电网 DL645 协议,具有检测功能、与上位机通讯管理等功能的仪表。而传统的智能仪表都是采用的 RS485 或者 红外进行仪表抄读,RS485 为有线抄读,虽然成功率较高,但是 RS485 抄读需要开外箱,开端钮盖,夹 485 电缆线,还会担心不小心夹到火线上,过程繁杂且不安全;红外抄读为无线抄读,距离比较近,抄读波特率 1200 速度比较慢,而且需要对准仪表的红外头才能加大抄读成功率。本项目采用蓝牙进行无线抄读,抄读距 离较远,无线抄读成功率大大增加,抄读速度也远大于红外。 软硬件设计思路 硬件设计 硬件设计采用的即 NXP KW41Z 开发板,未另做其他 PCB 软件设计 (1) 上位机抄表软件 采用的 Microsoft Visual Studio(简称 VS)是美国微软公司的开发工具包系列产品。VS 是一个基本完整 的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如 UML 工具、代码管控工具、集成开发 环境 (IDE) 等等。 一、SerialPort 类表示串行端口资源。命名空间 :System.IO.Ports 程序集 :System(在 system.dll 中)具 体用法可以参考官方链接:点击查看 界面分析 返回目录 恩智浦 KW41 微控制器设计大赛作品集 106 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 读地址:读取表内地址 读表号:读取电表的表号,一般每个电表固定不一样 温度:读取电表内的温度 读波特率:读取通信的波特率 读 Bat Level:读取 Bat 的状况 读软件版本号:读取表内软件的版本号,用于软件管控 接收分两个接受区域: 一个是显示接收报文; 一个是对相应报文进行解析。 嵌入式软件 一、DL645 协议软件解析 读地址和表号 解析时,特意把通信地址和表号都固定成固定的数组了,只是重新计算校验码 CRC 读温度: 返回目录 恩智浦 KW41 微控制器设计大赛作品集 107 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 电表一般都有表内温度抄读,用以监控电表工作状态 通过把 get_temperature() 函数获得的温度,转换成两个字节的 Hex 码,传递到返回报的 Data 去,再计算校验码 读 Bat Level 解析式,把 bat 的获取的比例,付给 data,在计算校验码。注意比例数是 hex 吗 读波特率 大家注意到了,这里的波特率是特征字,不是具体的波特率的值,因为国网 645 是这样定义的, 我 们来看看对应关系 ( 由于国网的波特率较低,特征字的对应关系被我改了 ) 读软件版本号 由于国网的软件版本号采用的 ASCII 码,比较麻烦,这里我略微改动了,用其他数据标识来 做软件版本号,用于记录软件管控。 二、软件执行步骤 简单国网 645 协议的电表搭建,我采用的是官网提供的 bm 程序 蓝牙接收判断: (a) 首字节为 0x68 (b) 判断第 2 个 0x68 (c) 判断控制字 (d) 获取长度 (e) 判断 CRC 校验 (f) 通过数据标识确定读取那个数据项 (g) 判断结束字节是否为 0x16 蓝牙发送判断: (a) 通过接收时置的标志判断是读那个标志还是写那个标志 (b) 直接报文赋值过去 返回目录 恩智浦 KW41 微控制器设计大赛作品集 108 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 作品源码:点击前往作品网络提交帖内下载 演示视频(点击观看) 项目总结与展望 该项目基本实现了 DL645 协议的仪表的蓝牙无线抄读,两块开发板一块作为智能仪表一块作为终端,通 过蓝牙串口进行 DL645 协议的无线抄读。 本项目对 DL645 规约的解析严重不够,数据标识也做得少,由于 DL645 协议太过庞大,几百页的协议完 全解析下来得几万行代码,只做了一些基本的来实现无线抄读。 进一步完善方向: (1) 开发手机端 APP,通过手机进行无线抄读。 (2) 增加更多的数据标识,增加抄读的内容。例如电池电压值、电流值、开发板的状态等等 返回目录 恩智浦 KW41 微控制器设计大赛作品集 109 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 通用无线遥控器 基本信息 大赛三等奖作品 作者 lemon0809 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 其实我本来想做的是通过这个遥控器来控制家里所有的电器,不仅仅是红外。因为我们公司现在已经有一 套完整的智能家居,包括(灯光,红外,门锁,窗帘等)但是是基于 TI 的方案。本来是想 KW41Z 和我的网关 连接,然后和手机进行蓝牙通信来实现,但因为时间原因我就弄了个红外转发的。利用专用的红外芯片通过蓝 牙来转发红外命令,实现一部手机控制家里的支持红外的设备。 软硬件设计思路 作品源码:点击前往作品网络提交帖内下载 演示视频 (点击查看) 电视没接机顶盒,我就演示一下开机关机 音量加减 上下等一些基本的内容,后面我会做红外学习和手机 APP。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 110 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 BMS 智能锁 基本信息 大赛三等奖作品 作者 wm20031015 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 当前市场上电动助力车、电动单车、独轮车等使用代步工具越来越多,此类型的工具基本都使用锂电池作 为能源,具备不同智能化程度的 BMS 系统,也出现了不少带有蓝牙、WIFI 或 GPRS 功能的高端产品,可以连 接到手机终端或云端服务器,可以远程对电池信息进行监控、定位和控制。本项目的目的是设计一个通过手机 或其他蓝牙终端(如蓝牙手环、平板、PC)连接到 BMS 系统,通过串口指令获取 BMS 的运行状态信息,打 开和关闭电池输出,以及锁定电池等功能。 软硬件设计思路 硬件设计 BMS 硬件部分:STM32F042+BQ78350+BQ76940 组成 14 串锂电池管理系统。 蓝牙硬件部分:FRDM - KW41Z 软件设计 KW41Z 作为蓝牙无线串口转发工具,实现 BMS 的数据信息与手机之间的透明传输,通过手机或其他蓝牙 设备,连接到 BMS 后,可以收到 BMS 发送的运行状态信息,并可以发送指令控制 BMS。 作品源码:点击前往作品网络提交帖内下载 演示视频(点击观看) 返回目录 恩智浦 KW41 微控制器设计大赛作品集 111 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 项目总结与展望 1、手上没有合适的电池组进行测试,旧时用电阻分压后给 BMS,所以采样回来的电压波动比较大,而后 分压不均衡。因为有过的电压超过保护值,所以 poweron 指令失效,不能正常输出。 2、原本计划做个安卓的界面的,实在手上事比较多,没有来得及弄,先借恩智浦的软件进行测试,后面 闲下来再补上吧。 3、目前带手机数据监控的 BMS 系统应用越来越多,例如平衡车、电动单车等,可以很方便的通过手机看 到电池的数据,知道电池的工作状态,健康状态,更可以将历史数据保存到云端服务器,为电池健康分析、维 护提供原始数据,以及电池回收再复用提供依据。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 112 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 智能管家——瓦力 基本信息 大赛三等奖作品 作者 皈依 互动交流 点此前往作品网络提交帖,跟帖与作者互动 项目背景和实现功能 这个创意其实就是根据当下非常热门的智能家居来的,随着科技的发展,电子产品存在于人类生活的各个 角落,为人类提供方便,而智能家居就是该领域非常重要的一个表现,因此我选择了这个方向。而整体作品最 后起名为爸宝主要也是因为我家宝宝快出生了,本来给他准备的玩具被我拿来参赛了。恩智浦举办的这次大赛 激发了我给小宝宝 DIY 玩具功能的想法,所以这个家居系统我起名叫做爸宝。这个作品算是个 demo 吧,后面 我会继续把这个东西做完善,添加更多的功能。 作品主要是一个智能家居的终端 demo,是智能家居网的一个缩影,包括智能家居的核心,外设以及从机。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 113 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 1、KW41 通过 WIFI 模块连入 Internet,可以通过手机和 KW41 进行交互。这是智能家居真正智能的节点, 可以随时随地通过手机了解和控制家里的情况。 2、KW41 作为基站和家里的其他的其他设备进行连接与数据交互。这是智能家居组网的表现,我认为将 来的主流必然是一个核心链接多个从机,从机包括电视,冰箱,空调等等。这里以玩具机器人为 DEMO 进行 连接展示。 3、家居监测功能,智能家居不仅包括智能家用电器等,也包括家里面的环境监测等。所以这个作品我以 DHT11 温湿度传感器为 demo 进行环境监测。 4、显示,这里的显示我选择了 LCD19264 进行显示。 智能家居核心就是 KW41 这个平台,包括外围的按键,LCD19264,DHT11 温湿度传感器,wifi 模块和红 外遥控器。而从机用的是一个红外控制的爸宝机器人。用户可以通过 LCD 实时查看手机下发的指令,机器人 上一个动作状态,家里的温湿度;另外也可以通过手机查询温湿度,也可以通过手机进行机器人的控制;最后 当家里的温湿度出现异常的时候,会主动发送数据到手机,给用户报警。 智能家居是当下非常热门的电子领域,可以极大地改变人的生活方式,为人类提供便利,未来智能家居会 走进千家万户,所以该领域的未来是非常大的,潜力也是无穷的。 软硬件设计思路 由于整个作品没有打 PCB,用的是飞线进行连接,下面提供的是作品的系统框架图: 硬件设计 硬件设计上用到了板载的 PTC 和 PTA 的 IO 口,用来驱动 LCD19264,按键,DHT11 温湿度传感器和机器 人遥控器。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 114 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 以上就是接线对应的 IO 口,电源部分都是从板子上引出来的,其中 DHT11,LCD19264 和 WIFI 模块都是 3.3V 供电,而红外遥控器板子采用的是 USB-5V 供电。 软件设计 软件设计部分流程: 上电,时钟,外设等初始化,进入开机界面。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 115 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 按下按键之后开始工作,这个时候会循环判断是否有 wifi 控制信号过来,如果有 wifi 指令过来会进行相 应的操作(控制机器人或者查询温湿度)。在循环内对 LCD 刷屏,同时也会不断地采样温湿度进行显示,同 时会对温湿度进行判断,当超过设定值的时候会进行报警。 作品源码:点击前往作品网络提交帖内下载 演示视频(点击观看) 操作说明: 1、确保整套系统处于 wifi 环境下。从而保证 wifi 模块的联网。(手机网络共享也可以测试) 2、手机通过 wifi 连接到网络(手机要连接到 wifi),然后打开微信,搜索开发快公众号,关注并进入。(也 可以用个人的公众号或者企业公众号,由于时间关系,用模块厂家的公众号做测试) 返回目录 恩智浦 KW41 微控制器设计大赛作品集 116 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 3、点击右下角我的设备——配置绑定,点击右上角的绑定 / 解绑,然后点击扫描二维码的框框: 4、进入二维码扫描界面,扫码下图所示的二维码,会读取到 wifi 模块的信息,点击确定。提示绑定成功。 5、然后再次点击我的设备——配置绑定,进入之后点击开始配置,进入 wifi 模块配网界面。Wifi 配置界 面可以看到当前连接的 wifi 名称,然后在 wifi 密码一栏中输入当前 wifi 的密码(先不要点击连接,输入完成 后保留该界面就行)。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 117 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 6、这个时候拿过来智能管家的控制核心,在侧边有两根跳线,跳线是 wifi 的串口信号线,会影响 wifi 配网, 因此先将这两根跳线断开。 7、拔掉之后将智能管家的核心上电(这个时候手机要注意配合),上电大概 1S 之后 LCD 会出现开机界面, 然后再等待 2S 左右,点击手机配网界面的连接按键(不要等待时间太久),开始给 wifi 模块配网,等待大概 30S 左右,配网结束,会提示配网成功。(如果遇到失败就多次重复配网步骤,确保 wifi 信号强度、串口线断 返回目录 恩智浦 KW41 微控制器设计大赛作品集 118 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 开、确保手机连接到 wifi、配网时手机不要离智能管家核心距离太远等等) 8、配网结束之后就可以回到公众号控制设备了 在控制之前要将爸宝机器人上电,上电按钮在机器人的后背,另外先前断开的智能管家的两根连线也要重 新连接起来,红色连接红色,灰色连接棕色。由于是开机界面,因此需要按下智能管家的按键进入工作状态。 点击我的设备——指令控制——小 e2:数据透传 进入到数据透传界面 在界面中选中右上角的 HEX,使用十六进制数据发送,在指令里面发送控制指令就可以实现控制了。 控制指令: 00ffff 爸宝机器人停止 01ffff 爸宝机器人前进 02ffff 爸宝机器人左转 03ffff 爸宝机器人右转 04ffff 爸宝机器人后退 06ffff 查询当前室内温湿度(会返回当前的温度值和湿度值), 另外当温度值超过 40 度,湿度值超 过 90 的时候,智能管家会主动上送温湿度到手机控制界面进行报警。 值得一提的是,配完网之后,手机就可以不用连接 wifi 了,在任何地方,任何时间都可以通过手机实时查 看智能管家的情况,真正实现智能家居物联网化。 项目总结与展望 该参赛作品——智能管家爸宝实现了智能家居的基本功能。是整套智能家居系统的缩影。首先有智能家居 的核心(KW41 控制),wifi 联网(wifi 模块),从机控制(爸宝机器人),环境监测(温湿度监测)。 项目进一步完善方向:该参赛作品仅仅是个简单的智能家居 demo,由于智能家居的面是非常非常广的, 包括智能家电,智能家具,环境监测以及安防等等。因此可以完善的东西还是非常的多的。 可以继续优化控制界面:可以制作人性化的控制界面,取代简单的指令输入。 可以继续添加联网途径:除了 wifi 还可以通过 2G,3G 等连接服务器。 可以继续添加智能家电:空调,电视,洗衣机等等; 可以继续添加环境监测:CO2 浓度,噪声大小,PM2.5 以及 CO,甲烷浓度等等; 可以继续添加智能家具:智能窗帘,只能衣柜等等; 可以继续添加安防功能:门磁,雷达监测以及红外检测等。 另外,由于从机众多,因此可以使用 thread 进行组网,使整套系统安全,可靠,高效。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 119 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 其他优秀作品 作者 fyaocn bjemt lvqy reayfei zhaogong yang_alex 陈纬 sptt1 dvd1478 zwq1489 liyuyao001 作品名称 蓝牙驱动的电子标签 无线传输数据采集器 锻炼鞋垫 天气预报信息屏 基于 KW41 和配套开发板设计的智能家居安防门禁系 统 智能时钟 温馨的家(简易智能家居) 无线低频信号采集系统 基于 KW41Z 多功能计步器原型设计 基于 KW41Z 和 Android 平台的汽车智能温控系统 家居环境探头 作品详情 查看作品 查看作品 查看作品 查看作品 查看作品 查看作品 查看作品 查看作品 查看作品 查看作品 查看作品 返回目录 恩智浦 KW41 微控制器设计大赛作品集 120 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 FAQ 篇 一、大赛网友 DIY 过程产生的问题 KW41Z 开箱及导入 SDK 的问题 安装 NXP FRDM-KW41Z 和 USB-KW41Z 后电脑就不定时出现蓝屏 MCUXpressoIDE_10.0.0_344 仿真调试时出现错误,如何解决? [KW41Z] OpenSDA 蓝屏、刷死的解决办法 关于 Thread 协议若干问题 kw41z 的 ble 烧录例程,2540dongle 不能接收? 无操作系统的 bare_metal 中多个任务在运行一次后会退出,如何再次运行这些任务呢? MCUXpresso IDE 10.0.2.411 编译 bluetooth 例程出错 FRDM-KW41Z 串口不正常 FRDM-KW41Z I2C 调试中遇到的设备地址问题 FRDM-KW41Z SPI 调试中遇到的奇怪时钟问题 如何计算 OFS 的参数以在 AD 结果中减掉一个数值 二、大赛线上颁奖礼直播期间产生的问题 在恩智浦 KW41 开发大赛线上颁奖礼直播间,恩智浦与 KW41 参赛者和相关工程师进行了一次深度的线上 交流。恩智浦特邀嘉宾对网友提出的问题进行了解答,点此查看直播 Q&A 整理。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 121 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 附录:100 个大赛入围的创意 恩智浦 KW41 大赛征集阶段共收集到 961 个创意,其中有 367 个网友提交详细的设计文案,最终遴选了 100 名网友入围大赛。 序号 项目名称 ( 中文 ) 1 多协议万能通用的自学习型智能遥控器 2 随访出诊包 3 基于 Kinetis KW41Z 的智能家居控制终端原型 4 蜂巢智能 5 基于 NXP-KW41Z 的智能电力监测仪的设计 6 让 Xbox one S 蓝牙手柄控制你的嵌入式设备 7 无线智能锁 8 通用无线遥控器 9 观赏鱼自动无线喂食系统 10 基于国网 DL645 协议的可蓝牙无线抄读的智能仪表 11 BLE 无线游戏手柄 12 Zephyr + Thread + BLE + 6LoWPAN 学习 13 智能停车场管理系统 14 KW 芯球 15 智慧牧场控制系统 16 基于 KW41 和配套开发板设计的智能家居安防门禁系统 17 基于 KW41 无线家居安防系统 18 智能管家——瓦力 19 智能家居情景监控 20 震动监测记录仪 21 家用无线防盗 + 智能感知系统 Ver1.0 22 智能门锁 23 一种无线自动搬运机器人 24 自己设计 PM2.5 空气质量检测仪 25 基于 KW41 的 Thread 网家庭环境监测系统 26 智能睡眠温控灯 序号 项目名称 ( 中文 ) 27 家用节能控制器 28 基于 KW41Z 的蓝牙键盘 29 智能台历 30 halo 光剑 31 老人跌倒检测监护装置 32 基于 KW41Z 的太阳能跟踪系统设计 33 基于 KW41Z 多功能计步器原型设计 34 基于 FRDM-KW41Z 的 Thread 工业传感器网络 35 智能皮带 36 智惠 e 家 37 智能家居监控系统 38 蓝牙驱动的电子标签 39 基于 BLE 及高德 API 的可直视单车导航系统 40 井盖标签 41 基于 kw41z 无线记录提取器 42 测试数据采集器 43 基于 KW41 的满足 Modbus 协议的无线传感器网络的设计 44 智能家居种植监测系统 45 灵魂旅行箱 46 无线低频信号采集系统 47 随天气变化颜色的小房子 48 基于 Thread 的智能型电磁流量计 49 智能狗圈 50 智能家居控制系统 51 基于 BLE 的智能门禁系统 52 基于蓝牙的智能门禁系统 返回目录 恩智浦 KW41 微控制器设计大赛作品集 122 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 序号 项目名称 ( 中文 ) 53 智能健康防护腰带 54 智能时钟 55 基于恩智浦无线 MCU Kinetis KW41Z 的门禁系统 56 模块化电池化容管理 57 BMS 智能锁 58 基于 KW41Z 的蓝牙游戏键盘 59 血氧检测仪 60 基于 KW41Z 和 Android 平台的汽车智能温控系统 61 智能坐姿宝 62 智能家居控制中心 63 基于 KW41Z 的指纹电子锁遥控系统 64 基于物联网的智能农业大棚系统 65 智慧交通 66 车联网 67 交互式(触屏)跑步机 68 基于 KW41Z 开发,应用于水轮机组无线盘车设备 69 一种基于 KW41Z 的面向家庭自动化的资源共享应用协议设计 70 智能无线水表 71 基于 Thread 的智能路灯控制 72 训练大师 73 小书包 74 无线传输智能抄表系统 75 家居环境探头 76 智能台灯 77 家庭多点 PM2.5 检测装置 78 多远程控制方式的输出可编程线性电源 79 土壤温湿度检测系统 80 智能家居运动控制平台 81 家用电源集中管理设备 82 基于 Kinetis KW41Z 的 BLE 语音电压表 序号 项目名称 ( 中文 ) 83 安全行李箱 84 手持式蓝牙汽车诊断仪 85 基于 Kinetis KW41Z 的蓝牙运动手环 86 多功能轨迹记录仪 87 无线传输数据采集器 88 智能传感器 89 锻炼鞋垫 90 骑行数据收集系统 91 灾害救援车的高速数据传输及动态监控 92 远程血压监测 93 多功能消防报警器 94 基于蓝牙的自适应调光控制系统 95 智能家电控制系统 96 智能驼背矫正器 97 小三 98 基于蓝牙的无刷电机控制 99 检测实验室智能监控系统设计 100 温馨的家 返回目录 恩智浦 KW41 微控制器设计大赛作品集 123 看工程师们如何调试玩转这颗 既行 Thread 又运行 BLE 的无线 MCU“芯”科技 版权声明 1、《恩智浦 KW41 微控制器设计大赛作品集 》著作权由恩智浦和 EEworld 共同拥有。 2、本着开源思想,我们授权任何有兴趣的工程师免费下载、复制、传播该书。 3、用于商业用途须经恩智浦和 EEworld 书面同意。 返回目录 恩智浦 KW41 微控制器设计大赛作品集 124

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。