蓝牙BLE以太网网关在智能家居中的应用(基于W5500)



已刊登至《无线电》六月刊

早在1994年爱立信公司就创立了蓝牙技术,并制定了基本的技术规范,原意是创造一种设备间通讯的标准化协议,以解决设备间通讯不兼容的情况,规范公布后得到大量移动设备制造商的支持,并于1999年成立蓝牙技术联盟(Bluetooth
Special Interest Group),该联盟制定并维护蓝牙无线规范,并对设备制造厂商提供Bluetooth认证与授权。

当前影响最广的版本应该是蓝牙4.0,本标准中增加了Bluetooth Smart和Bluetooth SmartReady标准。特别是Bluetooth
Smart版本,作为低功耗蓝牙(Bluetooth Low Energy,简称BLE),相对历史版本有质的飞跃,主要表现在成本低,功耗低,峰值电流极小并可以非常快速的建立连接,使用一粒纽扣电池就可以连续工作数年之久。相较于Zigbee和传统蓝牙,协议标准化和低功耗的优势让BLE在智能家居和穿戴设备上的优势一目了然,如图1所示。

图1常用无线协议比较

特别是2011年开始苹果iOS原生支持BLE之后,BLE得到大量iOS周边厂商和智能设备厂商的响应,基于BLE技术开发的智能硬件遍地开花,如:智能体重秤,智能手环,智能灯控,智能水杯,智能马桶,智能闹钟……

项目背景

近两年各种智能家居的产品层出不穷,而且众多“科技公司”“互联网企业”“资本投资公司”纷纷加入战团,看到做手机的A公司出了一个智能净化器,做空调的B公司出了一个智能手机,做手表的C公司出了一个智能手环,做马桶的D公司坐不住了,在马桶里面塞进去了一个温控+通讯模块,就诞生了智能马桶…智能设备市场好热闹啊。那么智能产业迅速发展的现在,我们在智能家居上还能有什么创意可以挑衅?灵感真的都源于生活,小熊有一天开门收快递,然后无情的风把万恶的门拍死了,只剩小熊穿着睡衣举着手机拿着包裹在风中凌乱,开锁小哥在小熊女友担保外加3张毛爷爷之后才高抬贵手开了门,懊恼啊…拍大腿的瞬间,当时小熊就萌发了一个念头,要是门锁换成智能控制的话,是不是钥匙就不再困扰我们了!!!只需要打开手机APP,就可以操纵智能门锁开门,或者像有强迫症的熊二,每次锁完门都要回头再看一次门有没有锁好,是不是有了门锁的手机APP,就可以随时看自家门锁的开关状态了!

想法出来了,回头就开始一步步落实。经过对场景设想,最终选用蓝牙+以太网网关的方案,正是因为蓝牙短距离+传输速度快的优势,其中以太网网关部分使用W5500硬件协议栈芯片实现。为了更加体现门锁的智能化,小熊设想了几个场景:其一是小熊出门收快递,门被无意中关上了,可以直接用手机开门;其二小熊不在家,小熊女朋友需要进门洗衣服做饭,小熊可以远程给女朋友开门;其三是熊二被女朋友赶出来了,需要临时借宿,小熊可以给熊二手机授予限时的开门权限(如2周)。看起来是不是很强大!图2就是小熊今天要为大家介绍的蓝牙智能门锁的实现示意图。

图2蓝牙智能门锁示意图

本方案的组成主要分为三个部分:BLE门锁机构,BLE网关设计,门锁管理服务器。因为门锁管理服务器主要为数据库管理以及APP调用等内容,本文不做过多阐述,本文将主要讲述BLE门锁和BLE的以太网网关的实现等部分内容。

关于BLE的实现,我们选用的是目前市场上最常见的TI CC2541,CC2541是BLE单芯片解决方案,包含一个工业级的8051内核以及RF收发器,集成TI的BLE低功耗协议栈并拥有相对完善的低功耗外设;而以太网部分用的硬件协议栈芯片W5500,W5500芯片使用硬件逻辑门电路实现TCP/IP协议栈的传输层及网络层(如:TCP,
UDP, ICMP, IPv4, ARP, IGMP, PPPoE等协议),并集成了数据链路层,物理层,以及32K字节片上RAM作为数据收发缓存。不言而喻,W5500非常适合CC2541这种8051内核,而且片上资源不是很丰富的MCU,一切就这么愉快的决定了。

为了实现BLE通讯,我们需要使用两个CC2541模块,一个作为Central,另一个作为Peripheral;他们之间实现BLE通信,其中Peripheral作为门锁机构的控制,而Central则驱动W5500作为TCP
Client实现网络通信,从而在网络端查询门锁状态以及实现网络控制开锁的功能。图3列出了需要准备的硬件设备。

图3所需硬件设备

准备工作:

1.安装编译环境IAR Embedded Workbench for 8051 8.10 Evaluation

2. 安装协议栈BLE-CC254x-1.3.2

3. 安装CC-Debugger模块调试下载器驱动

BLE以太网网关部分:

BLE以太网网关部分结构如图4:

图4
BLE以太网网关接线图

需要在CC2541的Central模式中集成W5500的驱动以及Socket处理部分,由于W5500的函数驱动库是分层次书写的,我们只需将SPI通信的硬件抽象层的函数重新编写即可。以下为CC2541的SPI1的初始化配置函数和数据收发函数的程序,以及复位管脚的控制程序:

01 void WIZ_SPI_Init(void)

02 {

03     PERCFG |= 0×02;               // PERCFG.U1CFG = 1

04     P1SEL |= 
0xE0;               // P1_7, P1_6, and P1_5 are

05                peripherals

06

07     P1SEL &= ~0×10;               // P1_4 is GPIO (SSN)

08     P1DIR |= 
0×10;               // SSN is set as output

09

10     // Set baud rate to max (system clock frequency / 8)

11     U1CSR = 0;                     // SPI Master Mode

12     // Configure phase, polarity, and bit order

13     U1GCR = 15;

14     U1BAUD = 255;

15     U1UCR = 0×80;

16     U1GCR |= BV(5);

17

18     P1SEL &= ~0×08;           // P1_3 is GPIO (SSN)

19     P1DIR |= 
0×08;           // P1_3 is set as output

20 }

21

22 void WIZ_RST(uint8 val)

23 {

24     if (val == LOW)

25     {

26         P1_3=0;

27     }

28     else if (val == HIGH)

29     {

30         P1_3=1;

31     }

32 }

33 // Connected to Data Flash

34 void WIZ_CS(uint8 val)

35 {

36     if (val == LOW)

37     {

38         P1_4=0;

39     }

40     else if (val == HIGH)

41     {

42         P1_4=1;

43     }

44 }

需要注意的是,CC2541的LCD驱动的部分引脚与SPI1的几个引脚是复用的,需要将和LCD有关的编译项去掉,避免发生冲突,导致SPI不可用。具体方法为在工程选项的编译子项里,将”HAL_LCD=TRUE”更改为“HAL_LCD=FALSE”。

程序重写完毕后,打开TI官方BLE的例程SerialApp3,此例程包含Central和Peripheral两部分,原始例程可以实现串口数据透传,基于此例进行集成相对起来会比较简单。将W5500的驱动程序包添加到工程中,如图5所示。

图5将W5500部分集成并初始化

其中Ethernrt_Init函数主要负责W5500的接口和参数的初始化:
01 /*该函数将会在任务函数的初始化函数中调用*/

02 void Ethernrt_Init( uint8 taskID )

03 {

04     WIZ_SPI_Init();    //初始化CC2541的SPI1作为W5500的通讯接口

05     Reset_W5500();     //复位W5500

06     set_default(); //设置初始化参数如MAC,IP地址等参数

07     set_network();     //使初始化的IP参数生效

08

09     //记录任务函数的taskID,备用

10     sendMsgTo_TaskID = taskID;

11 }

TI的官方BLE例程中有比较完备的协议栈程序,提供了完备的应用函数供用户调用,用户可以在应用层添加自己的任务和事件;更改应用层数据之前我们必须了解一下BLE的应答机制以及CC2541的OSAL也就是系统抽象层的任务调用机制,首先TI已经做了大量工作,我们无需重写BLE协议,而只需要根据自身的需求更改相应任务参数即可,在SimpleBLECentral_Init函数中将Central的相关参数初始化,比如:

GAPCentralRole_SetParameter设置Central可以扫描到的最大从端设备数目;

GATT_InitClient初始化GATT_Client,一般情况下Central做为Client,Peripheral作为Server,Central通过GATT_WriteCharValue和GATT_ReadCharValue来和Peripheral进行通讯;

GATT_RegisterForInd注册当前任务为GATT的notify和indicate的接收端,当Peripheral通过notify发来数据时,当前任务函数会收到数据;

osal_set_event该函数会启动任务函数START_DEVICE_EVT以及SBP_PERIODIC_EVT,由此转入系统任务的运行。

而我们的目的是在当前的任务处理机制中增加W5500的通讯连接维持以及通讯数据处理的工作,TI的意图是减少每项任务的处理时间,从而获得系统的快速响应,否则单项任务处理时间过长的话就会因为任务延迟而造成BLE连接中断。基于此原理,应尽量减少W5500每个任务循环所占用的时间,从而获得尽快的任务响应,所以应该减少原始的程序中任务等待和delay时间,我在将W5500的通讯任务函数do_tcpclient()放进主循环之后也对本函数进行了一些瘦身处理。

01 void osal_start_system( void )

02 {

03 #if !defined ( ZBIT ) && !defined ( UBIT )

04     for (;;) // Forever Loop

05 #endif

06     {

07 #ifdef BLECentral

08         do_tcpclient();

09 #endif

10

11         osal_run_system();

12     }

13 }

01 void do_tcpclient(void)

02 {

03     uint8 s=0;

04     uint16 anyport=3000;     /*定义一个任意端口并初始化*/

05

06     switch (getSn_SR(s))

07     {

08     case SOCK_CLOSED:     //查询Socket状态是closed状态时,初始化当前Socket

09         socket(s,Sn_MR_TCP,anyport++,Sn_MR_ND);

10         break;

11

12     case SOCK_INIT:       //查询Socket状态是初始化状态时,打开此Socket

13         connect(s,pc_ip,pc_port);

14         break;

15

16     case SOCK_ESTABLISHED: //查询Socket状态是连接已建立状态时,进行数据通信

17

18         break;

19

20     case SOCK_CLOSE_WAIT: //查询Socket状态是等待关闭状态时,关闭此Socket

21         close(s);

22         break;

23     }

24 }

大家可能注意到了,在SOCK_ESTABLISHED状态下,没有任何实际处理,那是因为我们为了减少任务处理时间,将Socket数据处理任务放在了前文提到的SBP_PERIODIC_EVT中,这个任务由SimpleBLECentral_ProcessEvent调用,并在任务的末尾进行重新委托,以SBP_PERIODIC_EVT_PERIOD为间隔循环调用,从而实现定时查询Socket状态,发送和接收W5500的缓存中数据。

01 if ( events & SBP_PERIODIC_EVT )

02 {

03     if ( SBP_PERIODIC_EVT_PERIOD )

04     {

05         if ((getSn_SR(0))== SOCK_ESTABLISHED)

06         {

07             if (getSn_IR(0) & Sn_IR_CON)

08             {

09                 setSn_IR(0, Sn_IR_CON);

10             }

11             len=getSn_RX_RSR(0);

12             if (len>0)

13             {

14                 recv(0,buffer,len);      //接收Socket数据

15                 buffer[len]=0×00;

16                 SerialPrintString(buffer); //串口打印接收到Socket的数据

17                 //printf(“%s\r\n”,pub_buf);

18                 w_send(0,buffer,len);    //向Socket发送接收到的数据,方便调试

19                 sbpGattWriteString(buffer,len);//将接收的数据向Peripheral发送

20             }

21         }

22         osal_start_timerEx( simpleBLETaskId, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );

23     }

24     return (events ^ SBP_PERIODIC_EVT);

25 }

至此,W5500的集成已经完成,下一步是处理任务数据,在原始例程中,已经有指令处理部分,比如AT+SCAN是搜索Peripheral,AT+CON1是与搜索到的第一个从端建立链接,这部分我们无需处理,只需要把门锁的控制指令按标准数据发送就可以。

BLE门锁部分:

在完成BLE以太网网关之后,我们下一步进行门锁部分的工作,作为Peripheral,程序上和Central大同小异,Central搜索Peripheral,并通过GATT_WriteCharValue和GATT_ReadCharValue查询和调用Peripheral上具体的服务;我们要做的是,在系统抽象层的任务调用机制中增加步进电机控制机制,以及在接收到Central发送的门锁的控制指令后执行相应的开锁和闭锁动作,另外还可以增加一个干簧管用作磁控开关用来判断门的闭合状态,如图6所示。

图6 BLE门锁步进电机传动部分

本文选用的5v供电的5线4相步进电机,步进电机的原始例程是通过Delay函数来实现延迟的,而在TI的这种尽量减少每个任务处理时间的机制下,我们需要更改为定时器Timer3触发来执行步进电机的控制,更改部分如图7所示。

图7定时器改进部分代码

01 void Moter_GPIO_init(void)

02 {

03     P1DIR |= BV(0) | BV(1) | BV(2)| BV(3);        //P1.0定义为输出口

04     P1SEL &= ~(BV(0) | BV(1) | BV(2)| BV(3)); //P1.0定义为一般GPIO

05

06     T3CTL |= BV(3); //开启溢出中断

07     T3CTL |= BV(5) | BV(6) | BV(7) ;//128分频

08     //T3CTL &= ~(BV(0) | BV(1)); //0×00~0xff,重复

09     T3CC0 = 0x4f;

10     T3CTL |= BV(0)| BV(1);

11

12     T3CTL |= BV(4); //启动timer3

13     T3IE =1; //开启T3中断控制

14     EA=1;

15 }

在SimpleBLEPeripheral_Init函数中进行了步进电机控制IO的初始化Moter_GPIO_init();并在其中将Timer3进行了初始化;选取P1.0,P1.1,P1.2,P1.3,分别作为步进电机四相ABCD;如果按照A-B-C-D的顺序就是正转,也就是开门,相应D-C-B-A就是反转,也就是闭门操作;

Timer3的中断触发执行如下步骤

01 #pragma vector = T3_VECTOR

02 __interrupt void Timer3_ISR(void)

03 {

04     IRCON = 0×00;

05     /*这里实现每隔0.5秒翻转一次,128分频,由于timer3为8为,从0×00~0xff,

06     128/16M *Number=0.5s,所以Number=62500次

07    
运行255次,count*255=62500,所以,count=245次*/

08     if (xxcount++>10)

09     {

10         xxcount=0;

11         if (Motor_AB_flag > 0 && Motor_BA_flag == 0)

12         {

13             MotorCW();

14             Motor_AB_flag++;

15             if (Motor_AB_flag >= 1024)

16             {

17                 MotorStop();

18                 Motor_AB_flag = 0;

19                 sbpSerialAppSendNoti(“unlock\r\n”,8);

20             }

21

22         }

23         if (Motor_BA_flag > 0 && Motor_AB_flag == 0)

24         {

25             MotorCCW();

26             Motor_BA_flag++;

27             if (Motor_BA_flag >= 1024)

28             {

29                 MotorStop();

30                 Motor_BA_flag = 0;

31                 sbpSerialAppSendNoti(“lock\r\n”,6);

32             }

33         }

34     }

35 }

可以看到在中断触发中根据Motor_AB_flag和Motor_BA_flag的状态来执行开锁和闭锁动作,当执行1024个周期后停止动作并将相应的标志位置0;而Motor_AB_flag和Motor_BA_flag的状态这时根据Central发送过来的数据进行相关解析之后进行的,在Peripheral的初始化函数SimpleBLEPeripheral_Init中注册了一个接收数据的回调函数simpleProfileChangeCB。

当Central对Peripheral发送数据更改PROFILE服务的CHAR1字段时,下面的步骤被触发

01 case SIMPLEPROFILE_CHAR1:

02 //SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR1, &newValue );

03 SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR1, newValueBuf );

04 if (newValueBuf[0]== ‘a’ && newValueBuf[1]== ‘d’ && newValueBuf[2]== ‘m’ && newValueBuf[3]== ‘i’ && newValueBuf[4]== ‘n’)

05 {

06     if (newValueBuf[5] == ‘?’)

07     {

08         BLE_REPLY();

09     }

10     else

11     {

12         if (newValueBuf[5]==’=‘&&newValueBuf[6]== ‘A’ && newValueBuf[7]== ‘B’)

13         {

14             Motor_AB_flag = 1;

15         }

16        else if(newValueBuf[5]==’=‘&&newValueBuf[6]==’B‘&& newValueBuf[7]== ‘A’)

17         {

18             Motor_BA_flag = 1;

19         }

20         else

21         {

22             SetRGB(newValueBuf[5], newValueBuf[6], newValueBuf[7]);

23             sbpSerialAppWrite (newValueBuf, 20);

24 #if (defined HAL_LCD) && (HAL_LCD == TRUE)

25             HalLcdWriteString((char*)newValueBuf, HAL_LCD_LINE_4 );

26 #endif // (defined HAL_LCD) && (HAL_LCD == TRUE)

27         }

28     }

29 }

30

31 break;

为了安全的需要,我们定义了一个密码段,这个密码段可以进一步改进为SSL加密或者RSA算法加密,本文以admin为例,查询状态指令为”admin?”,Peripheral根据当前”lock”或”unlock”状态以及磁控开关回复当前状态;开锁指令目前为”admin=AB”;闭锁为”admin=BA”。

系统测试:

系统测试部分我们可以按照手机APP(BLE)控制门锁和网络控制门锁两部分进行:

  1. 使用手机的蓝牙和BLE门锁通讯

为了方便测试BLE,需要在手机上安装一个APP“LightBlue
– Bluetooth Low Energy”,

图8 APP LightBlue – Bluetooth Low Energy

可以测试BLE的数据收发等工作,我们在 apple store上安装此app之后,就可以搜索到BLE门锁“Smart
Lock”,如图9所示。

图9搜索BLE门锁Smart Lock                  图10
写入对应字段字符

在选择“Smart Lock”并对UUID:FFF0的服务Characteristic1字段写入HEX字符的admin=AB“0x61646D696E3D4142”,如图10所示;之后就可以听到“Smart
Lock”传来的齿轮摩擦声,成功。

  1. 使用BLE以太网网关和BLE门锁通讯

网关通讯测试我分为两部分进行:

1)通过BLE以太网网关的串口指令和”Smart Lock”配对并控制门锁开关,如图11

图11通过串口指令与”Smart Lock”配对

我们一共发送了三个指令:

AT+SCAN   //搜索从端设备

AT+CON1   //与搜索到的第一个设备建立连接

admin=AB  //前面两个是发送给网关的指令,而admin=AB会作为数据发送给从端

从端在接收到本数据之后控制电机转动,到达指令周期之后停转并回复

“unlock”给网关,控制周期完成。

  1. 通过socket发送数据给”Smart Lock”控制门锁开关

    BLE门锁”Smart Lock”在上电之后作为TCP Cllient去和Server建立通讯连接并等待接收数据,当通讯连接建立之后,我们通过Socket测试工具“Pdu
    Receiver”发送控制指令给“W5500+BLE”网关,网关会把数据转发给”Smart Lock”,从而控制步进电机按周期转动,如图12所示。

  2. 图12 通过测试工具Pdu Receiver进行门锁控制
  3. 最后
  4. 至此,已经实现了蓝牙BLE网关对门锁的智能控制,希望能给大家提供一个DIY的思路。那么,在智能家居的大潮中,蓝牙BLE技术的应用已被越来越多厂商关注并采用,在这里借助W5500的硬件协议栈,给大家提示一个更便捷的联网方式,进一步减轻智能网关开发的难度,真正做到制作简便、智能易用!

感谢阅读!

更多信息,请关注:

WIZne官方网站:http://www.iwiznet.cn

WIZnet微信公众号:iwiznet

时间: 2024-08-08 05:36:52

蓝牙BLE以太网网关在智能家居中的应用(基于W5500)的相关文章

迅为4412开发平台Zigbee模块在物联网智能家居中的应用

  物联网智能家居的发展物联网随着互联网的发展,可以通过互联网实现物和物的互联,就有了物联网的概念.传统家居电器 有了物联网之后,在家居电器范围中,就是通过物联网技术将家中的各种设备连接到一起,家居中有了物联就可以称为智能家居.智能家居可以知道家居中的实时状态,远程控制等等. ISM频段 ISM频段, 无线频段都是受到管控,除了ISM频段. 常用的ISM无线频段, 433/868MHz的射频协议: 2.4G的WIFI.BLE和ZigBee. 智能家居协议选择判断标准 智能家居协议选择判断标准,对

一款新型的智能家居WiFi选择方案——SimpleWiFi在无线智能家居中的应用

一款新型的智能家居WiFi选择方案——SimpleWiFi在无线智能家居中的应用 先上图:     随着科学技术的不断发展,局域网也正逐渐向无线化,多网合一的方向发展,在这个多网合一快速发展过程中,带动了多种无线技术的广泛应用,WIFI便是其中的一种.WiFi用于智能家居控制,有着其得天独厚的优势.其优势如下: 优势一:WiFi终端设备现在基本上已经普及,WiFi已经智能手持终端的标配.大到笔记本.Pad,小到手机,WiFi已经是无所不在. 优势二:WiFi作为无线局域网的技术标准,能够通过无线

【智能家居篇】wifi在智能家居中的应用

转载请注明出处:http://blog.csdn.net/Righthek 谢谢! 在设计智能家居系统方案时,一个非常关键的point就是组网方式.组网方式关系到整个智能家居系统的稳定性.可扩展性.实时性等:从安装及维护等各方面考虑,对于组网方式,本人觉得现在应该没人会去搭建一个有线的智能家居网络了吧,呵呵...... 所以,我们毫无疑问选择了无线的组网方式! 无线组网方式有很多种,有采用Zigbee.Wifi.Z-wave等等,当然一个完整的智能家居系统不可能只采用单纯的一种无线通信方式进行组

解析Zigbee技术在智能家居应用中的优缺点

ZigBee技术最佳应用范围是无线传感网络中,例如水文监测,污染监测等场景中.这些应用场景往往需要多个节电自组网,相互之间传输数据,便于维护和扩容.今年来,国内外也有很多厂家把Zigbee技术应用在智能家居的场景中,下面,我们就看看Zigbee技术在智能家居中,到底有哪些优缺点呢? ZIGBEE技术简介 Zigbee是基于IEEE802.15.4的通信协议,IEEE802.15.4处理低级MAC层和物理层协议,而Zigbee协议对网络层和API进行了标准化.Zigbee完全协议用于一次可直接连接

第12章 智能家居

12.1智能家居概述 12.1.1传统家居与智能家居 物联网智能家居.传统智能家居区别 传统智能家居发展了20多年,至今为止取得了一定的进步,但技术落后.观点陈旧.创新乏力一直是中国传统智能家居企业的整体特征. 今天,随着物联网技术的高速发展,无线物联网技术给传统智能家居带来了全新的产业机会,一些全球优秀企业纷纷涉足物联网智能家居行业.在我国,虽然部分企业在无线物联网核心技术上取得了很大突破,但我们也应该清醒地看到大量技术落后的产品充斥市场仍是当前我国智能家居行业的重要特征.很多传统企业甚至一些

基于无线控制的智能家居技术探讨

谈到智能家居的无线控制方式,就不得不联想到与之相关的几大无线技术.目前,全球通用的无线技术主要包括红外.蓝牙.RFID.ZigBee.WIFI等.随着科技的不断发展,无线技术也进行着日新月异的改进.基于其灵活性.无需布线等优点,在市场上也得到相当广泛应用.智能家居产品的出现,更是为无线技术开辟了另一方新的应用空间.相比较传统智能家居系统采用的有线布网方式,无线技术的应用则可以减少布线带来的麻烦,具有更好的可扩展性.移动性.因此采用无线智能控制模式是智能家居发展的必然选择.下面小编就和大家共同探讨

TR069与智能家居

(部分信息援引自BBF市场调研报告) TR069现状 BBF最新的统计数据显示, 全球25%的宽带线路由TR069管理,几乎所有的运营商都一定程度的依赖于TR069 ACS生态系统.TR069已经被多个技术标准组织兼容支持,包括3GPP, Small Cell forum, ITU, ETSI, Home Gateway Initiative, Wimax Forum. TR069覆盖的领域已经从传统的DSL路由器发展到任何类型的IADs(路由器,网关,调制解调器), 以及电视机顶盒, VoIP

基于Android电视机的ZigBee智能家居系统设计

智能家居是利用先进的计算机技术,嵌入式系统和网络通信技术,将家庭中的各种设备(如照明系统.环境监控.安防系统.网络家电)通过家庭网络连接到一起的,自从美国在1984年真正的智能建筑出现以后,国外已经有将近30年的研究历史,而国内在这方面的研究就相对较晚,从2003年才逐步的应用于高端市场,而且标准不一.由于智能家居的系统具有安全.方便.高效.快捷.智能化等诸多的优点,从而使智能家居的开发建设成为21世界科技发展的必然趋势. 目前市场上使用的无线技术有很多,有蓝牙,WLAN技术等,由于协议复杂,成

智能家居APP开发

智能家居APP开发 欢迎加入APP开发技术群:347072638 前言,随着智能硬件设备的流行,智能家居开始红火,智能家居就是家用电器的智能化,包括智能锁,灯,空调,灯,音箱等等,移动设备通过WIFI或者蓝牙4.0技术控制智能家居将是未来的一种趋势.各大平台蜂拥而入,苹果智能家居HomeKit,三星智能家居平台,小米路由器等等风起云涌,控制家庭大战一触而发.然而站在APP开发者的角度来分析一下当前形势,APP开发的出路在哪里? 智能家居在各大平台已经出了一整套解决方案,包括APP端的设计,功能实