一、BLE蓝牙的具体优势:
1、BLE蓝牙模块的待机时间超长
市面上的蓝牙智能锁基本都是使用干电池供电,而BLE低功耗蓝牙模块在广播、传输、待机和睡眠模式下均拥有超低的功耗,比如E104-2G4U04A模块,最大发射功率仅为2.5mW。
2、可以使用手机APP开锁、更加方便快捷
在移动互联网时代,手机是一个人必不可少的工具,而目前手机制造商都在BLE蓝牙上面开拓市场,每部手机都集成了蓝牙模块,ebyte'开发的BLE低功耗蓝牙模块可以直接与手机蓝牙进行通信使用起来方便快捷。蓝牙智能锁方案也只要打开手机APP和蓝牙,开锁非常简单!
3、适用性强信号不受环境干扰
无线传输避免不了信号的干扰、屏蔽的外界因素,会直接影响使用体验。虽然wifi和蓝牙同处于2.4G频段也会有信号相互干扰的情况,但蓝牙的传输速度较高,开锁体验会更好,且体积较小,应用在蓝牙智能锁当中有非常明显的优势。
4、安全性更高
相比其他的智能门锁蓝牙有特定的蓝牙协议,在通信上可以根据不同的用户制定不同的密码协议很难破解所以保密性更好。

二:产品
在BLE蓝牙模块的开发上技术成熟可靠、经验积累深厚,主要的BLE蓝牙方案有E104-BT01、E104-BT02、E104-2G4U04A。
BLE蓝牙产品集成度高、接口丰富、二次开发简单。

三、 BLE蓝牙的智能门锁应用案例

3.1、低功耗蓝牙智能门锁包含如下部分:
1)、手机或者智能设备开锁客户端;
2)、包含低功耗蓝牙的智能门锁执行机构;
3)、服务于低功耗蓝牙安全性能高的客户管理后台。
手机或者智能设备开锁客户端主要作用是负责和智能门锁的低功耗蓝牙进行通信、识别用户输入的开锁密码、执行用户的操作指令;低功耗蓝牙的智能门锁执行机构,此部分是低功耗智能门锁的核心部分,其主要作用是负责匹配和客户端的通信连接、根据要求执行开锁指令或者其他操作指令;客户端管理后台主要作用是涉及到门锁的初始化、门锁设置命令的处理(比如密码设置、密码修改等)。其应用案例框图如下所示:

蓝牙工作时分为主机与从机,而在智能门锁上蓝牙是被手机APP或者其他客户端的蓝牙搜索,所以我们需要将嵌入智能门锁的蓝牙模块设置为从机模式,并且需要配置其相关参数。
3.2、参数配置
1)、先将模块上的MOD引脚拉低进入配置模式,将模块上的ROLE引脚拉高,则配置为从机模式。在配置蓝牙模块时可以使用串口调试助手进行配置。
2)、将E104-BT02模块插入电脑,打开串口调试助手,图中1是选择端口(不一定是COM13,需要根据自己电脑的端口进行选择),图中2是设置串口波特率,E104-BT02默认的波特率是19200,图中3、4、5是设置停止位、数据位、奇偶校验,根据手册进行设置。设置完成后打开串口,进入配置模式。

3)、若需要修改波特率,则发送指令,其中xxx表示波特率,比如需要设置为9600,则发送指令,返回则修改成功。
4)、如果需要修改设备名,则发送指令,xxx最大为18字节,用户可以根据自己的需求修改名字。
5)、因为智能门锁需要被手机APP或客户端搜索,所以需要开启模块的广播功能,通过发送指令< STARTADV >开启广播,在开启广播后设置广播数据,可以将一些门锁的一些信息放入广播,发送指令,xxx最大为22个字节。
6)、为了满足低功耗的需求我们需要设置广播间隙,发送指令,xxx范围32~16000,对应时间20ms~10s。
7)、连接间隙关乎到蓝牙的功耗,设置合适的连接间隙可以降低功耗,发送指令、设置最大最小连接间隙,xxx范围6~3200对应时间7.5ms~4s。
8)、设置连接超时,蓝牙模块在连接时可能由于时移或者其他原因造成错过某个连接事件,所以连接超时会包含6个连接间隙时间,比如连接间隙为1s则连接超时设置为6s,发送指令设置连接超时,xxx范围10~3200对应时间100ms~32s。
配置方法如图所示:

3.3、蓝牙模块E104-BT02系列产品在低功耗智能门锁的使用方法
1)、 在智能门锁里嵌入E104-BT02模块,将智能门锁的MCU与亿佰特的E104-BT02按下图接线。

通过智能门锁的MCU将指令信息传输到BLE低功耗蓝牙模块,无需其他程序处理,E104-BT02模块支持无线透传。
2)、 打开手机上的APP软件(这里以BLE测试工具为例说明)。

3)、打开APP后会显示附近的蓝牙设备,找到E104-BT02_V4.1,可以看到E104-BT02_V4.1蓝牙的MAC地址、广播包数据,用户可以根据自己的需求修改广播包中的数据内容,比如将门锁公司名称写入其中。

4)、点击E104-BT02_V4.1建立连接,进入服务界面,用户可以根据需求设置专属的传输服务(这里以UnknownService为例)。

可以看到UnknownService特定的128位UUID值,用户可以根据不同的需求进行设计。
5)、点击UnknownService服务,进入控制交互界面,用户根据需求制定服务,比如将图中服务1设置为消息接收,2设置为开门服务,通过服务1接收后台的消息,通过服务2开锁。

点击服务1进入服务后点击开始通知可以看到服务读取到了后台传送过来的消息。

点击服务2进入到开锁模式,点击写入输入门锁密码。
手机APP将密码传送到智能门锁端,这里用串口助手代替门锁显示APP传送过来的密码。

如果接收到的密码和智能锁MCU存储的密码匹配成功,则智能锁MCU控制门锁打开,完成开门任务。

假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
我有一个Controller,我想为这个Controller创建一个助手,我可以在不包含它的情况下使用它。我尝试像这样创建一个与Controller同名的助手classCars::EnginesController我创建的助手是moduleCars::EnginesHelperdefcheck_fuellogger.debug("chekingfuel")endend我得到的错误是undefinedlocalvariableormethod`check_fuel'for#有没有我遗漏的约定? 最佳答案 如果你真的想在Controll
我有一个模块stat存在于目录结构中:lib/stat_creator/stat/在lib/stat_creator/stat.rb中,我在lib/stat_creator/stat/目录中有我需要的文件,以及:moduleStatCreatormoduleStatendend当我使用该模块时,我将这些类称为StatCreator::Stat::Foo.new现在我想要一个存在于应用程序中的根Stat类。我在app/models中制作了我的Stat类,并在routes.rb中进行了设置。但是,如果我转到Rails控制台并尝试在应用程序/模型中使用Stat类,例如:Stat.by_use