基于 Realtek RTL8723DS 的“万能遥控器杀手”方案

前言
遥控器是每个家庭中的必备电子产品之一,一直以来占据著家庭里很重要的位置,但是随著越来越多的电子产品进入家庭普通生活,每一个电子产品都有自己的遥控器,这样就不可避免产生大量重复的应用,而且他们之间互不相容,大多的遥控器会给人带来很多的困扰,尤其是中老年的生活增加诸多的不便。因此开发一种新型的万能遥控器非常的必要,它们能够相容所有的电器控制协议,这样使用者就不必担心电器之间的互不相容的问题,“一键在手,快乐无忧”新型万能遥控器逐步成为家庭所有电器的统领者,我们的万能遥控器杀手就是在这样的背景下产生的!

项目概述
本项目基于Realtek 半导体RTL8723DS 的新型应用,RTL8723DS 系列产品是一颗单芯片的Bluetooth蓝牙/WIFI无线芯片,它们的出现结束了以往诸侯混战的市场格局,因此成为终结传统遥控器的杀手级产品,也被称为当代“遥控器杀手”。本专案是一种小型且便宜的多设备可以通过遥控器控制的遥控器智慧手机应用程式。 它允许用户控制家庭可以访问互联网的任何地方的电器通过智慧手机。 它适用于所有类型和通过品牌的红外线控制电器保留编码和自学。另外具备语音辨识功能。 以下详细介绍一种不同于传统遥控器。 这是朝着真正的智慧家居应用的发展方向。

特点:
1、仅用一个即可替换所有传统遥控器。您的智慧手机将成为所有人的控制器电器
2、即使您身处家中,也要控制家用电器离开家。 当你在办公室时,你可以使用您的智慧手机安排预录在几英里外的家里的电视上播放。
3、帮助您的家人经营您的房屋电器,无论您身在何处。 当你是外出旅行,你的父母或小孩在家中使用高科技设备时遇到麻烦,您可以帮助他们从以下位置操作设备您的智慧手机。
系统组成部分

一、硬体
•包含一个Wi-Fi/BT模组,该模组是连接到家用无线路由器。 这允许用于智慧手机和该设备互联互通且远端可控。
•包含红外接收器和发射机以学习和发送红外线信号。
•使用前,请带好遥控器然后按不同的键让xRemote学习和在您的设备中记录设备的代码序列家,从而控制他们。
•然后将代码发送并存储在您的手机。
•在智慧手机上使用应用程式进行控制时电器,您的手机会发送命令通过网路或Wi-Fi,xRemote设备。 然后,xRemote将回应并通过红外发送代码序列发射器,因此可以被设备接收。

1.硬体设计
我们的项目是建立一个可以连接和控制传统的家用电器以及新型智慧设备的智慧远端控制中心。要打造这个很酷的产品,我们必须非常重视硬体电路设计,这是整个开发过程硬体设计中最重要的部分之一。硬体电路设计分为几个关键过程,包括顶层设计,选择合适的电子元件,设计电子电路和测试程式。

1.1系统结构
要创建此智慧遥控器,我们首先需要构建一个硬体系统来完成功能。 微处理器是整个平台的核心,它是所有处理必需的处理部分。 遥控器包含一个Wi-Fi/BT模组,该模组已连接到家庭无线路由器,因此可以通过移动应用程式进行访问。 控制器还包含六个红外发射器和一个红外接收器,因此可以学习传统遥控器的控制信号控制,然后代之以工作。 此外,该设备还包含两个感测器温度和照度。 另外,需要稳压器来产生稳定的3.3v电源输出。 下面是系统简化结构图。

SYS
1.2 主控芯片的选择
定义系统结构后,我们需要找到合适的主控芯片及Wi-Fi/BT芯片或者模组。由于我们正在构建一个可以在未来可持续拥有长生命周期的产品,因此我们做出选择时需要考虑几个关键标准,包括性能,品质,价格和易于开发。如上图所示,我们使用瑞芯微RK3266及Realtek制造的wifi/BT Combo 无线芯片RTL8723DS作为我们的核心微处理器及Wi-Fi/BT通讯芯片或者模组。我们最终选择此芯片组的主要原因是它完美平衡了价格和性能。该芯片组不仅仅功能强大,还完美的结合了Wi-Fi/BT模组(符合IEEE 802.11n),因此它减少了系统的复杂化和解决2.4GHz RF信号传输的工作。以至于更少使用器件来实现2.4G Wi-Fi/BT应用需要的外部元件。由于我们的MCU是采用了高性能RK3266,它是为个人平板电脑和智慧音讯设备设计的高性能四核应用程式处理器。 提供了许多嵌入式强大的硬体引擎来优化高端应用程式的性能。RK3326支援几乎全格式的H.264解码器,支持1080 p@60 fps,H.265解码器支持1080 p@60 fps,通过1080 p@30 fps支持H.264编码器,高品质的JPEG编码器/解码器。嵌入式3D GPU使RK 3326完全相容OpenGL ES 1.1/2.0/3.2、DirectX 11 FL9_3、OpenCL 2.0和Vulkan 1.0。特殊的2D硬体引擎将最大限度地提高显示性能,并提供运行非常顺利。RK3326具有高性能的外部记忆体界面(DDR 3/DDR3L/DDR 4/LPDDR 2/LPDDR 3),能够维持需要的记忆体频宽。该芯片的选择能够远远的满足了我们系统未来的扩展及灵活的新功能增加问题,下面的图表显示了基本的框图:
RK3326

因此我们可以在其上运行定制的Linux,从而简化了高级开发Wi-Fi/BT资料处理之类的应用程式,并避免可能很容易的超载问题。嵌入式Linux系统还大大增加了功能,并且我们设备的可扩展性。我们选择RK3266芯片组的另一个原因是它提供了多种硬体界面,例如作为SPI,I2C和USB。这些界面可用于连接周边设备的负载和因此将支援更多的应用程式。我们在系统期间发现在互联网上的资料与认同了23ds芯片的组合较少。所以整个开发过程变得颇具挑战性。

1.3 硬体基本电路设计
1.3.1 wifi/BT 芯片或者模组(RTL8723DS)
下 图是Realtek 的 RTL8723DS的系统方框图,RTL8723DS的SDIO/UART硬体界面以及GPIO外部界面用于外部控制。所以我们在原理图设计中连接所有可 用的GPIO埠,SDIO埠及其他埠。内部序列传输和接收埠TXD和RXD已连接以测试固件升级功能。该芯片由3.3V直流电源供电,可以通过将 RST埠设置为高电平来复位。下面是功能框图官方资料表中提供的RTL8723DS SoC的原理框图:
8723ds
1)RTL8723DS 使用关键点注意事项:
a.RTL8723DS module PIN38支援两种供电方式,3.3V直接供电方式和Vbat(3.3V-5.5V)供电方式,需要根据客户设计严格搭配使用。Vbat供电方式必须通过 Module 的PIN39(VBAT_EN)来开启和关断VBAT LDO输出3.3V,若如果原本8723DS模组的PIN39(CHIP_EN)没有拉出来,则需上在module上使用R6与R7电阻分压,来使 VBAT Enable,相比若VBAT_IN无法off的platform,能有VBAT_EN控制的话相对会更省电
b.RTL8723DS/RTL8703CS的模组是有拉出PIN39(VBAT_EN),
*对3.3V供电方式VBAT_EN无法reset整个IC,需要将WL_DIS#与BT_DIS#同时拉low,才能够reset整个IC;
*对Vbat供电方式可以关断Vbat LDO输出,相当于给IC断电以达到reset整个IC的目的。
*再次强调,使用Vbat供电方式,VBAT_EN必须外接host的GPIO来控制
c.RTL8723DS/RTL8703CS 模组的VBAT_EN的电压域为1.6V~3.3V,只要在这个范围之内的,VBAT就会输出3.3V;同样的模组的 Pin12(WL_DIS#)Pin34(BT_DIS#)可以支援1.8V与3.3V,只要在1.6V~3.3V之间,均可认为high
d.RTL8723DS/RTL8703CS Module的PIN13的电压也是由Module的PIN22(VDDIO)来决定,可以支持1.8V与3.3V
e.RTL8723DS/RTL8703CS Module的PIN7的电压是由Module的PIN22(VDDIO)来决定,可以支持1.8V与3.3V。不过另外需要注意的是该Pin也是我们 IC TEST_MOD_SEL pin,需要在IC 上电的时候拉low,我们IC内部有pull low 电阻,因此需要确认外部host端是否有pull high电阻,若是则拿去该电阻,另外也需
要确认Host端在我们WIFI on的时候为low!

1.3.2 系统计时器
在这个专案中,需要一个精确的计时器才能生成38 kHz的载波红外信号。也可以使用TLC555计时器芯片由德州仪器(TI)提供。我们选择一个外接的TLC555作为计时器芯片的原因是它提供了三个操作模式:单稳态模式,非稳态模式和双稳态模式(施密特触发器),因此可以实现不同的功能,例如PWM或LED闪烁。所有这些模式都易于实现。 计时器芯片可以在2 MHz的最大频率下运行,因此能够处理红外传输所需的频率。 TLC555支援开/关调制机制在其输出波形上。 RESET埠决定计时器输出的开/关,这样我们就可以通过将此埠连接到MCU的GPIO埠来调制资料。触发电平约为电源电压的三分之一和阈值电平约 为电源电压的三分之二。对于应用电路,我们使用官方介绍的Astable操作模式包含时序元件R7,R8和C5的数据手册。二极体D1用于减小输出波形的占空比,以便可以限制功耗为最小。经过测试后,振荡可在输出接近 38 kHz,因此IR LED以此频率发射脉冲IR射线,输出周期接近1:3,从而将功耗降低了三倍。

1.3.3红外线发射器
在本项目中,产生的红外信号由多个红外LED发出以进行远端控制家用电器。在这里,我们使用TSAL7600大功率红外发光二极体由Vishay Semiconductors制造。我们选择这种红外LED的原因是它的高可靠性和高辐射强度。该IR LED的半强度角约为±30度,因此我们决定使用6个此IR LED覆盖所有方向。从系统设计的角度来看,这些IR LED的开/关将由TLC555计时器输出控制。根据资料表,TSAL7600 LED的典型正向电压为1.35V。正向电流为100mA。因此,很难以5V的功率连续支援两个LED计时器的输出电压可以达到3V高。所以我们决定连接 这些并行排列的IR LED。每个IR LED都连接到一个双极电晶体和一个小电阻。电晶体起到开关的作用,小电阻器提供红外LED具有足够的电流(实际测试中最大为150mA恒定电流)。我们 使用的电晶体这是2N2222型BJT,可驱动高达1A的电流。

1.3.4红外线接收器
在此专案中,需要红外接收器以接收发射的38 KHz红外信号来自传统的遥控器。 在这里,我们使用TSOP39338红外接收器模组由Vishay Semiconductors制造。 它是专为红外线设计的小型接收器一个PIN二极体和一个前置放大器组装在一个引线框架上的远端控制系统。 解调后的输出信号可以直接由微处理器进行解码,这是主要的我们选择此红外接收器模组的原因。该模组的应用电路设计参见资料手册。

1.3.5模数转换
在该专案中,需要使用模数转换器以转换来自将感测器转换成数位信号,然后可由MCU读取和处理。 在这里我们用ADS1015超小型,低功耗,12位模数转换器,由德州仪器(TI)。 我们之所以选择该芯片作为ADC,是因为它具有四个输入通道,因此我们将来可能会在不更换ADC芯片的情况下将其他感测器集成到系统中。ADS1015使 用与I2C相容的序列界面来传输资料,并且该界面也是RK3266 SoC支援。 与SPI界面相比,I2C仅使用两根线,并且易于实行。 该界面非常适合低频资料传输,例如感测器资料。 应用电路设计请参见datasheet。

1.3.6感测器
1.3.6.1温度感测器
在 该专案中,使用温度感测器来收集环境温度资料。 我们在这里使用的温度感测器是LM35,这个精密摄氏度温度感测器由德州仪器(TI)制造。 我们选择LM35作为温度感测器的原因是在实际应用中不需要任何外部校准。 另一个原因是精度:室温下的典型精度为±0.25°C,并且覆盖整个检测范围-40°C至+ 110°C 。应用电路设计请参见datasheet。
1.3.6.2照度感测器
在该专案中,照明感测器用于收集环境光强度资料。 我们在这里使用的照明感测器是PDV-P1803,CdS光电导光电管由Advanced Photonix Inc.设计。它可以感应400至700nm的光。 这取决于电阻的照明电阻范围为16kΩ至33kΩ。 应用电路设计有关该感测器的资讯,请参见datasheet。

1.4硬体驱动
要遥控所有红外线装置,关键是要了解基本的红外协议。 我们在驱动程式中实现了一个通用协议,即NEC红外协议。 即使从接收器中学到的电波不属于这两个,我们仍然有记录发送从设备中学习的机制。
1.4.1 NEC协议
NEC协定具有在38 kHz频率载波的收发器上运行。 NEC IR传输协定使用消息位元的脉冲距离编码。 每个脉冲突发为562.5µs,逻辑位元的发送方式如下:
逻辑'0'– 562.5µs的脉冲突发,后跟562.5µs的间隔,总发送时间为1.125毫秒;逻辑“ 1” – 562.5µs的脉冲突发,后跟1.6875ms的空间,总发送时间为2.25毫秒,当按遥控器上的一个键时,传输的消息包括以下,按顺序:
1)9ms脉冲突发
2)4.5ms空间
3)接收设备的8位元位址
4)位址的8位元逻辑逆
5)8位命令
6)命令的8位元逻辑逆
7)最后的562.5µs脉冲突发,表示消息传输结束。
1.4.2 NEC协议的实现
红外感测器驱动程式的设计或多或少地通过切换来类比红外协议板上的I / O引脚。有三个寄存器负责对I / O进行操作:
RALINK_REG_PIORENA是I / O的启用寄存器,我们需要在初始化时将其设置为高;
RALINK_REG_PIODIR是控制此引脚是输入还是输出的寄存器。
RALINK_REG_PIODATA是资料寄存器,因此我们需要在写入时设置寄存器的值并从该寄存器复制(如果已读取)。
一 个问题是如何实现高精度延迟。 Linux内核提供了睡眠功能直到几微秒后才能释放CPU。实现高分辨率延迟的一种更好的方法是使用高分辨率计时器结构。基本用法情况如下所示:
1)执行hrrtimer_init,包括使用ktime_set来设置计时器到期时间,以及使用hrtimer_init函数初始化hrtimer,并设置回呼函数指标。
2)在需要延迟的地方,调用hrtimer_start函数,然后调用wait_event函数直到event_queue被唤醒。
3)在回呼函数中,执行所需的操作,唤醒事件伫列,然后返回HRTIMER_NORESTART。
另 外,实现小延迟的一种更容易的方法是在LINUX内核中设置函数延迟。它是系统繁忙的等待功能,系统在延迟时常常会被锁定,因此只能用于较少的延迟超过2毫秒。对于接收器,主要问题是如何检测接收器何时收到正确的波形。一种方法是使用高分辨率计时器并每隔一次扫描输入引脚。我们之所以不采用这种想法,是因为它占 用了系统资源,不够准确(毫秒错误)。 Linux内核支持中断。实施接收器唤醒功能的正确方法。内核的中断处理资料结构由设备驱动程式根据需要设置控制系统的中断。为此,设备驱动程式使用一组 Linux内核服务用于请求中断,启用和禁用它的中断。各个设备驱动程式调用这些常式以注册其中断处理常式位址。 request_irq函数说明红外线驱动程式注册I / O中断。Linux中断处理子系统的主要任务之一是将中断路由到正确的中断处理代码。 Linux使用一组指向资料结构的指标包含处理系统中断的常式的位址每次IR接收器接收到资料时; 它将产生低逻辑电平,因此系统将被中断唤醒。 驱动程式中的Handler函数被调用,触发的函数被调用记录波形。

二、软体发展
对 于liunx及安卓系统的软体发展相对比其他的系统开发更为复杂,但是Realtek已经全部考虑到这些开发者的困扰问题,Realtek提供了一篮子的芯片驱动程式,使用者只需要将这些驱动push到指定的路径即可轻松建立好完整的应用系统。完全不必担心驱动程式的复杂羞涩难懂,只剩下安心编写上层应用层程式了。
2.1 嵌入式服务器
2.1.1详细结构
服务器由三部分组成-调度器,服务器,udp广播模组。当系统开机或服务器崩溃时,控制器将运行服务器。 还可以负责连接智慧手机命令指定或存储在其中Wi-Fi热点快闪记忆体。服务器运行协议以与智慧手机进行通信,并将调用界面。udp广播模组将向Wi-Fi网路广播服务器的IP和MAC位址。然后,智慧手机可以捕获套装软体并使用该资讯连接服务器,RTL8723DS系统提供了软AP和STA。软AP是指接入点。 在此模式下,系统将配置为Wi-Fi热点。 其他附近的设备可以找到我们指定的SSID,并使用正确的金钥来访问我们的系统。 我们用当我们需要使用者指定Wi-Fi网路或连接到主机丢失。STA是指网站。 在这种模式下,系统可以通过以下方式连接到其他热点:我们指定的资讯。 连接到主机后,系统将切换到此模式并且连接稳定。Wi-Fi服务器中使用了许多Linux工具,例如网路工具,记忆体工具。 最多常用的是ifconfig,iwconfig,nvram_set和nvram_get。 不同工具的组合构成服务器的工具集。
2.1.2 调度器
调度器将首先检测记忆体中是否存储有一对SSID和金钥。如果有此类资讯,它将尝试切换到STA模式并连接指定的热点。如果成功,它将直接启动服务器应用程式并等待直到服务器关闭。 如果没有的话将切换到AP模式并启动服务器应用程式。如果没有此类资讯,将确保它处于AP模式并启动服务器应用。在执行任何操作之前,服务器将检查系统模式寄存器以找出哪些内容的模式。调度器的存在将减少服务器应用程式失败的机会。当服务器由于某种原因关闭时,它将重新启动。
2.1.3服务器
服务器应用程式负责运行协定,调用界面并检查连接状态。它运行TCP通讯端服务器,并连续接受Wi-Fi中的任何连接请求网路或乙太网。连接到通讯端用户端时,它将根据资料做出回应以及协定中的规则。服务器支援四个请求–初始化Wi-Fi连接(iniWi-Fi),连接测试 (iniConnection),学习新的IR代码(iniLearn),然后通过IR发送IR代码收发器(iniControl)。使用者必须连接到我们系统建立的AP并设置正确的SSID和密码,在以下情况下的本地网路:现有Wi-Fi的SSID或密码网路已更改,系统设置为预设值或系统无法连接至旧主机由于未知原因。 iniWi-Fi请求旨在将SSID /密码传输到装置。当我们的设备收到此资讯时,它将首先将其存储到记忆体的快闪记忆体中,然后尝试连接到指定的Wi-Fi热点。iniConnection请求用于测试连接。服务器将简单地向用户端打招呼。如果成功,则可以应用其他请求。当使用者想要将新按钮从他或她的IR控制器录制到智慧手机时应用程式,他或她应发送iniLearn请求并按一下指向我们设备的按钮。服务器将调用IR界面,IR收发器将自动记录代码。最后,将代码返回给发送请求的智能手机。 iniControl请求将首先触发从智慧手机接收IR代码,并且然后通过红外收发器将其发送出去。通讯端连接接受超时设置为15秒,通讯端收发超时设置为5秒。当连接接受超时发生时,服务器将检查连接状态。如果连接仍然有效,则将不会执行任何操作。如果连接是丢失时,如果记忆体中没有保存SSID或密码, 它将切换到AP模式,并且当有SSID和密码时,会返回并尝试重新连接。这些设定确保服务器将定期检查连接并确保可访问。
2.1.4 UDP广播
UDP 广播将不断从系统读取IP和MAC位址,并且将此资讯广播到本地Wi-Fi网路中每个主机上的多个埠。在这里,我们只想广播到某些特定的埠,以便我们不使用广播IP在路由器上。我们分析IP地址和子网路遮罩,并在本地手动广播网路。此方法的另一个优点是,并非所有路由器都支持广播,因此此方法更具适应性。模组将每10秒钟广播一次资讯。换句话说,如果是智慧手机要连接到该设备,它应该在本地网路上监听10秒多一点。如果无法听到来自服务器的任何消息,则表明该服务器不在此网路中。如果能够接收UDP套装程式,服务器必须在此网路中。该模组的结构非常直观。首先,模组读取并分析IP和MAC服务器本身的地址。如果不存在IP地址,则模组将等待一小段时间然后重试,直到读出正确的IP地址为止。分析将给出本地网路并准备构造UDP包。然后将包裹发送到每个主机上指 定的埠一一对应,这与埠扫描策略非常相似。每次我们将埠或IP地址加1直至到达每个IP地址。之后,我们再次读取服务器本身的IP和MAC地址。
2.1.5服务器实用程式
为Wi-Fi服务器构建了一些实用程式,以使开发更加容易。所有实用程式都是基于Linux工具。这是列表和简要说明。
1. change_to_STA:将系统切换到STA模式;
2. change_to_AP:将系统切换到AP模式;
3. cmdCall:通过管道(popen())调用应用程式,使调用者能够准备好应用程式的输出被调用;
4. FLASH_read:从记忆体中读取资料;
5. Conn_Wi-Fi:连接到指定的Wi-Fi热点。它能够检测到Wi-Fi网路自动并连接到它。此外,这将确保服务器获得IP使用udhcpc工具从DHCP服务器获得的位址;
6. device_ap_reset:在服务器上设置AP – SSID,密码,模式等。
7. iniServerSocket:初始化通讯端服务器;
8. LOCAL_Wi-Fi_connection_test:测试当前连接状态;
9. broadcast_ip_selfadder:帮助计算UDP广播的下一个IP地址;
10. broadcast_ip_comparator:帮助计算下一个UDP广播的IP地址;

2.2 .Smart Phone Software
在 Wi-Fi模式下,RTL8723DS充当接入点,并等待智能手机通知Wi-Fi SSID和密码。 首先,智慧手机正在连接到主机。 Wi-Fi协定启动后,智慧手机会将“ hello:iniWi-Fi”发送到主机板上,并且应该会收到“ ryd:iniWi-Fi”。 然后智慧手机发送SSID和密码登上例如:“ LINGNET / 1234567890”,连接到用户的家用路由器。在连接模式下,智慧手机会向主机板发送消息“ hello:iniConnect”,以检查是否连接仍然良好,它应该会收到一条包括“ rdy:iniConnect”的消息以确认连接,然后智慧手机将在萤幕上显示Toast以显示连接成功。
2.2.1 学习模式
在学习模式下,使用者希望智慧手机从遥控器上学习按钮控制器。 使用者按下智慧手机上的学习按钮。 智慧手机和平板使用标准协定“ hello:iniLearn”和“ rdy:iniLearn”以确认连接。 然后他们等待用户按下他想在遥控器上学习的按钮。 接收方收到控制资讯后通过控制器,开发板将红外资料解析为二进位资料,然后将其发送到智慧手机。智慧手机会将资料和相应控制按钮的ID存储到资料库中。
2.2.2 控制模式
在控制模式下,使用者希望通过智慧设备控制设备(电视,扬声器)电话。 使用者按下控制按钮后,智慧手机和主机板使用该协定“ hello:iniControl:1”和“ rdy:iniControl:1”以确认连接并准备进行控制。智慧手机从资料库中查询已存储的资料,然后发送到主机板。
2.3 SQLite资料库
智慧手机实现了Android SQLite资料库界面来存储学习到的资料来自使用者的遥控器。 我们使用的资料库表包含两列。ID列存储所有控制按钮。这些ID可以在Android的“ R.java.id”中找到。 controlInfolizi列存储学习资料,通常为10000位元长。在学习模式执行绪中,在我们设置了初始过程之后,用户端将获得来自服务器的资料,其结尾修饰符 为“ xend”。我们消除了end修饰符并存储其馀的修饰符资料导入我们的资料库。资料库中的ID列是相应的控制按钮的ID。对于例如,“ Learn_4”按钮会将其学到的信息放入“ Control_4” ID按钮进入资料库。
2.4. 固件设计
对于嵌入式软体部分,我们需要学习和使用嵌入式Linux程式设计。整个系统是基于Linux 2.6.32版本。瑞芯微的SDK提供了具有我们想要的所有新功能。 例如Wi-Fi和乙太网模组,Linux核心,协定栈。通过所有这些模组和服务,我们能够连接到有线乙太网和Wi-Fi,使用TCP / IP协定传输资料,并构建多进程软体。另外Realtek RTL8723DS也提供了基于Liunx,安卓,win三种驱动程式的许多模组和服务有助于开发的实施,服务器基于瑞芯微提供的官方SDK。我们需要编写GPIO驱动程式来控制IR收发器。 Wi-Fi连接常式和感测器例行程式也是必需的,首先应从Linux内核开始进行裁剪定制到驱动编写。红外程式解码IR波形并将IR代码存储到SDRAM中。
2.4.1嵌入式服务器
服务器的基本结构随著Wi-Fi服务的发展而增长。 Wi-Fi服务器负责以确保连接的稳定性并运行我们的协议。然后服务器将能够发送并接收收集的资料。下图显示了嵌入式服务器系统的高层结构如下所示:
22
可以看出模组化可由不同人员开发的模组可以在一起运行,逐步整合以运行整个系统。服务器的所有软体都是用C编写的,并由mips-linux cross编译编译器。界面被编写为应用程式,可以称为新进程。这里对于此项目,服务器在接收到某些命令时将使用红外界面从智慧手机。该协议在Wi-Fi/BT服务器内部实现,并且将为了确保灵活性,将来将其移至单个文件中。智慧手机将运行与服务器通信的相同协定。为了确保连接的稳定性,服务器能够连接到任何Wi-Fi在智能手机的命令下启动热点,并在失去连接时尝试重新连接。由于R开266系统提供了基本的Wi-Fi服务,因此服务器会定期检查连接状态。此处使用的所有网路工具都是Linux核心。在某些情况下,服务器将调用界面来完成不同的工作。
2.4.2 移动软体设计

目前,Android是最受欢迎的移动作业系统。灵活多平台支援的。此外,我们的专案依赖于TCP通讯,而Java是进行TCP的理想平台,因此我们选择Android作为我们的用户端平台。我们使用的Android开发人员工具包括Eclipse平台,JDT,CDT,EMF,GEF和WTP,开发我们的Android应用程式。我们的Android应用程式具有与服务器程式相对应的四种模式:Wi-Fi模式,连接模式,学习模式和控制模式。它们每个都在一个实施的执行绪中。另外还有一个守护程式的执行绪定期运行以检测来自服务器其他的服务。我们解析UDP资料包中的内容,并获取服务器的IP地址。此外,我们的应用需要有一个有助于存储和维护所学习资料的资料库。智慧手机与硬体板之间的通信具有四种模式:Wi-Fi,Connect,控制和学习。它们都具有相似的协议,但是实现不同的功能。每一个模式具有相应的按钮。连接模式是用户端和服务器之间最简单的通信。要检查智慧手机与服务器主机板之间的连接是否良好。它通过发送一个TCP / IP消息“ hello:iniConnect”,如果得到有效结果(“ rdy:iniConnect”),则该应用将生成一个在萤幕上告知连接是否良好。否则,该应用将告诉用户连接失败。Wi-Fi按钮包含使用者的家庭或本地无线路由器的资讯,例如SSID和密码,以使服务器主机板连接到本地路由器。下图是智慧手机应用程的基本使用者界面:

222
它显示了Android模拟器的萤幕截图。 Wi-Fi按钮执行Wi-Fi模式。连接按钮实现连接模式,检查连接状态。 Learn_ *按钮动作学习模式,并将学习到的资料通过Control_ *按钮ID存储到资料库中。 控制_*按钮可查询资料库中的资料并发送至电路板。每个学习按钮都有一个对应的控制按钮。 一旦学习协议完成后,它将从服务器获取的资料存储到本地Android资料库中:SQLite。

2.4.3 Linux驱动程式
该专案的目标之一是实现Linux红外收发器。我们还实施I2C界面驱动程式,以便我们可以收集温度,光线和其他感测器的资料。您可以通过手机远端控制电视,空调和扬声器,还可以通过互联网拨打电话,并通过感测器获取回馈,以查看其是否工作正常。要了解这个系统是如何工作的,我们首先应该了解Linux系统的一些基本概念。
*用户空间和内核空间
Linux程式设计最重要的概念是用户和内核空间。内核空间是作业系统的核心,它是用于执行进程并提供其服务的地方,特别是其设备驱动程式,构成了最终使用者/程式师之间的桥梁或界面和硬体。由于我们试图操纵红外发射和接收器,必须编写在内核中运行的程式。在Linux中,进程是一个正在运行的实例程式。我们需要在使用者空间中实现了一个间接控制硬体的应用程式。
*Linux驱动
Linux将设备作为档进行操作。在Linux上,每个硬体都由一个档表示位于/ dev的设备档。因此,我们可以使用fopen打开设备,使用read和使用write函数设置和获取资料,使用ioctl函数进行输入和输出控制。所有Linuix系统下的设备主要有两种,字元设备和块设备。字元设备是不执行缓冲的字元设备,块设备是那些不执行缓冲的设备通过缓存访问。由于字元设备更易于实现,红外感测器不需要大量资料,我决定将红外驱动器实现为字元设备。每个字元设备驱动程式都有一个档操作结构,该结构声明了支援的功能。
 struct file_operations {
 loff_t(* llseek)(结构档*,loff_t,int);
 ssize_t(* read)(结构档*,char *,size_t,loff_t *);
 ssize_t(* write)(结构档*,const char *,size_t,loff_t *);
 int(* ioctl)(结构索引节点*,结构档*,不带正负号的整数,无符号长整数);
 int(* open)(结构索引节点*,结构档*);
 int(* release)(结构索引节点*,结构档*);
 };
每个功能的说明:
llseek:重新定位读写档的偏移量。
read:从档描述符读取。我们使用此功能从内核空间中的缓冲区复制使用者空间资料。
write:写入档描述符。我们使用此函数编写内核空间缓冲区,因此它可以由红外发射器发送。
ioctl:处理特殊档的基础设备参数。我们用它来通知收发器何时应该收集资料,它使用哪种发送模式。
open:当我们使用fopen获取档描述符时,将调用此函数。一些初始化是在这里完成。
release:当我们使用fclose时会调用此函数。动态分配的缓冲区需要在这里实现。
2.5 嵌入式服务器
嵌入式服务器是硬体系统上的中央控制逻辑模组。它具有两个主要功能-提供网路服务和控制硬体界面。网路服务旨在与智慧手机进行通信并交换命令和其他资讯。服务器能够调用其他模组的界面并发送或收集资讯。然后可以将该资讯发送到智慧手机。
2.5.1 TCP / IP协议
在我们的项目中,智慧手机和硬体之间的通信主要是通过TCP / IP (传输控制协定/ Internet协定)。这是最基本的协定互联网,并定义电子设备如何访问互联网以及资料如何可以实现传播。它具有四级层次结构,其中每个级别调用子级网路来完成其任务。简而言之,TCP的责任是找到传输过程中出现问题,并请求重新传输,直到所有资料到达目的地安全,而IP为每台电脑提供一个位址。TCP / IP具有四个级别的模型,其中包含:网路界面层,网路层,传输层和应用程式层。还有另一种TCP / IP模型可以划分网路界面层分为两层:资料连结层和实体层。
*网路界面层
网路界面层的实体层定义了物理介质的特征,例如如:机械性能,电子性能,功能性能和程式特征。这个资料连结层负责接收IP资料包并发送它们通过网路,常见的界面协定是:乙太网802.3,权杖环802.5,X.25,框架转送,HDLC等
*网路层
它与电脑之间的通信有关,具有三个功能。
(a)处理来自传输层的RTS(请求发送)并将其载入到IP资料包中,填写报头,选择通往目标目的地的路径并将其发送到适当的界面。
(b)布置输入资料包并检查其有效性,然后路由该资料包。
(c)处理路线,流体控制和卡塞问题。
*传输层
它提供了应用程式及其功能之间的通信,包括:格式化资讯流并提供可靠的传输。 该层的主要协议是TCP和UDP(使用者资料包通讯协定)。
*应用层
它为使用者提供一些常见的应用程式,例如电子邮件,档案传输,档访问和Telnet。 这一层的主要协议是:FTP,TELNET,DNS,SMTP,NFS,HTTP。

三、测试
3.1 硬体电路测试
对于这个专案,我们的测试策略是首先确保每个单独的模组都能正常工作。然后我们将它们放在一起设计完整的电路图和PCB之后,再测试最终的硬体系统。
3.1.1单个模组测试
首先,我们必须确保Wi-Fi模组可以正常运行。由于Wi-Fi模组是现有的板,效果很好,无需太多测试。然后我们测试计时器模组以查看其输出频率是否正确。我们通过连接进行了测试用示波器观察电路并观察输出波形。结果是频率保持在38 kHz的稳定水准,误差约为±0.5 kHz。所以精度是约98.6%。将频率和占空比调整为更好的值后,我们尝试连接计时器输入到信号发生器以查看输出是否跟随。然后,我们专注于测试红外发送和接收模组。测试最大红外传输的范围和覆盖范围,我们逐渐移动传输模组,分离接收器模组,直到接收器侧的信号消失。 ADC和感测器一起测试以查看感测器是否工作并且转换是否正确。图片下面显示了我们如何使用单个IR测试计时器和红外传输模组LED和一个BJT。另外,我们尝试与服务器连接并通过Android控制遥控器的扬声器电话。 在5米的距离内都能正常工作。红外驱动器实现了两种模式,即检波测模式和记录波模式。 检波模式将检测红外信号是否为NEC,并将其解码。 如果信号不是NEC,驱动程式记录波形并将原始资料发送回服务器。 两种模式经示波器验证并集成到系统中。 它已经成功控制了电视和Speaker。
4.2 嵌入式服务器测试
服务器的测试分为两个级别。第一级是通过乙太网电缆使用Fedora Linux进行的自测。 全部四个基本函数具有自己的测试用例,我们可以在终端上看到正确的响应。 设备的控制通过Windows上的telnet完成。 我们可以监控并发送一些必要的命令对其进行说明。从理论上讲,我们可以使用任何路由器作为热点。 并且设备已经已成功测试以连接TP-LINK路由器(TL-WR841N)和电脑热点(通过WiFi设置)Share Spirit)和智慧手机热点(HTC ONE)。为了简化测试,我们使用HTC ONE作为热点。
3.2.1自检
以下是对每个请求的自检:
IniWi-Fi:
iniConnection:
iniLearn:由于自检不包括IR硬体,因此设备返回了第一个回应
rdy:ini学习,然后等待IR信号。
iniControl:
3.2.2 UDP广播测试
我们应用ARP的应用协定来查找同一网路中的主机。 找到主机后,它将发送资料。
3.3 智慧手机软体测试
为了确保Android应用程式能够按预期工作,我们创建了一些Linux服务器测试情况对应四种模式。所有测试用例都以相同的方式工作。我们运行本地电脑上的服务器并访问该电脑的IP地址,然后更改采用Android代码的SERVERIP。以WIFI模式为例,首先我们让智慧手机连接与服务器相同的无线网路,然后运行我们的应用程式。在测试期间,我们输出每个I / O操作。我们按下了WIFI按钮,服务器收到了“ hello:iniWIFI”,回复“ rdy:iniWIFI”。 Android收到“ rdy”消息后,便发送了预先输入的消息SSID和密码。服务器输出获得的SSID和密码,然后我们检查结果。我们测试四个模式,所有这些模式都会立即产生正确的结果,这意味着Android应用可以立即与服务器通信。为了测试学习模式,我们创建了一个服务器测试用例,一旦接收到“ hello:iniLearn”,它就会会将内容存储库发送到本地“ learn.ir”文件中。然后智慧手机将资料存储在资料库,然后输出存储在资料库中的内容,以检查“ lean.ir”中的内容是否相同测试控制模式与学习模式相同,我们按一下控制按钮以查看是否服务器在“ learn.ir”中获得相同的内容
3.4 系统测试
对于完整的系统测试,我们只需要将所有内容连接在一起并测试通过与团队成员合作完成专案的其他功能,例如移动应用程式和硬体固件开发。 他们可能只是将硬体系统视为运行其功能的较低层平台。
4.5硬体驱动测试
我们使用学习指令,并将原始代码写入二进位档案。 然后我们读取档重新发送信号。

四、结束语
4.1小结
总之,我们将构建一个多设备智慧遥控器。由此专案,我们将对Wi-Fi模组的开发过程有深入的了解,也熟悉了嵌入式Linux系统设计的命令。
4.2未来改进
4.2.1蓝牙和ZigBee模组
将来,我们可能会集成蓝牙4.0(BLE)模组和ZigBee 2.4GHz RF模组进入我们当前的硬体系统。这些模组将大大增强功能,并且产品的通用性,因为市场上有许多支持以下功能之一的智慧设备这两个协定。另外,这两个协定都支援建立自组织网路网格,为将来实现一些新功能(如室内)提供了可能性定位和跨平台通信。
4.2.2跑马LED和呼吸灯
将来,我们可能还会在系统中添加跑马LED模组以显示一些LED动画和特殊的LED效果。这可以表明我们设备的不同状况,例如Wi-Fi连接,硬体匹配过程,学习模式等待等。也使产品看起来更好。也可以添加呼吸灯。我们相信该产品将成功成为并引入新的智慧家居生活方式新世界。 它将成为进入下一代物联网智慧家庭技术重要的里程碑。
•集成蓝牙模组和Zigbee模组。
•完善最终的商业智慧手机应用程式发展。
•启动最终原型的Beta测试。
•改善PCB设计。
•完整的可靠性和压力测试。
•广告和行销。
•安全认证。
•完成包装设计和订购的提篮子打包项目。
•将产品投放市场。

►场景应用图

►产品实体图

►展示板照片

►方案方块图

►核心技术优势

功能: •开/关控制:您可以打开或关闭任何智能手机的红外线控制装置。 •任何传统遥控器的全部功能控制:您可以调高/调低音量,更改通道,模式,静音,所有功能集成在通过智慧手机进行远端控制。 •长途控制:您可以使用智慧手机甚至可以控制您的家用电器当您离家千里之外。 •多设备控制:您不再需要看为特定的控制器操作某些器具; 您现在可以控制所有设备只需一个遥控器:您的智能手机。 •环境监控:温度感测器,湿度感测器和光感测器集成在xRemote,因此您随时可以轻松检查房屋的温度,湿度和照明您的智能手机。 •长距离和广角:七个红外发射器实现覆盖所有方向并确保红外信号很强。 •使用简单:只需几个步骤即可轻松设置。电话应用程式的使用者界面简洁明了。

►方案规格

•原型Android应用程式 •尺寸:仅为79.9釐米* 54.3釐米 •wifi/BT双模

技术文档

类型标题档案
硬件Datasheet
硬件Schematics
硬件BOM
软件RK