查看: 1591|回复: 0

[经验] 【我的毕设作品】智能音箱 制技术探讨

[复制链接]
  • TA的每日心情
    开心
    2019-8-31 07:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2019-7-5 09:49:48 | 显示全部楼层 |阅读模式
    分享到:
    1.绪论
    1.1 论文研究背景
    作为传播文化、传递音乐的现代化工具,音响设备不仅有助于沉淀深厚的文化底蕴与地域特色、提升国民的价值观念,还能增添生活中的趣味性。作为全球最大的音响市场,中国必须从一个音频生产消费大国转变成一个掌握音频核心技术的强国,才能持久繁荣地发展[1]。因此,中国的音频技术就必须要加大技术研发投入去适应快速发展,中国的音频文化也将得到很大发展。中国的音响文化要去大发展,就要具有中国自己的特色,才能受到中国消费者的喜爱与追捧。未来音响设备要向着更精确,更个性化,更智能的方向发展,所以音响设备与电脑、通讯设备、智能家电等,它们之间相互配合与补充,融为一体,这就创建了一个更方便、更有效、更实用的新系统——智能音响[2]。
    2016年,AlphaGo与人类呈现出显著的矛盾,让人工智能站到了世界的面前。在政策扶持的全球化大形势下,加之资本运作的持续推进以及电子技术的迅猛发展,2017年人工智能实现了由概念化向实体产品的转变,应用能力持续提升。整个AI领域内学者以及社会各界最为关注的当属智能音响。
    为促进个体市场占有率的持续提升,各大花联网企业均加大研发投入,这是由于他们以敏锐的嗅觉感受到了智能音响的巨大生态性以及商业性。随着语音技术的发展,语音交互逐步发现成现阶段应用性最强、覆盖面积最广的智能交互方式,广泛的运用于多样化的智能设备中,比如智能家居、智能手机以及平板电脑等等,也展现出巨大的成长空间,成为未来交互的最主流手段。在未来我们部署智能家居平台的时候,智能音响也就成为了必不可少的硬件控制管理接口中心。
    1.2 国内外发展现状
    就全球的发展形势而言,智能音响最早可追溯到美国,并取得了显著的成果。根据有关数据显示,智能音响设备几乎覆盖了美国16%的家庭。然后,具体到我国的发展情况来讲,在以联想为代表的众多品牌逐步涌现的大形势下,推动了智能音响市场的发展。小米AI的问世、天猫精灵的发布,再加上以小问音响为代表的现象级事件的发生,更加带动了智能音响领域发展的节奏,快速的拉动了市场规模。去年,智能音响在国内市场的总销售量为176万部,创造了5.1亿元的销售总额,同比增长率达四位数,所以人们将其形象的命名为:市场大爆发。
    1.3 研究的目的和意义
    在智能音响系统所描述的生活场景中,尽管基于场景间的差异,其使用方式
    会存在一定区别,然而它们均展现出对未来美好生活的向往。
    之所以以智能音响灯为研究目标,主要有如下三个原因:
    第一,在社会迅猛发展的大形势下,人们的生活节奏加快,生活压力过大,年轻人更青睐于通过听音乐来舒缓自己的压力,达到身心放松的目的。诸多研究结果共同指出,音乐与新生代的关联性极为密切。这就预示着日后人们与智能音响的关系将进一步增强。
    第二,由于互动方便,在语音技术持续发展的大形势下,语音将成为未来交互的主流形式。它可以使用户不需要直接接触输入设备就可以控制音响灯,也无需手动操作或面部识别,从某种层次上讲此种交互方式的意义极为显著。比如,当我们在开车过程中、高空作业时,就可以通过对通讯设备发出语音指令即可,不需要转移目光,也解放了双手。显然,这是一种更为安全便捷的控制方式。
    第三,纵览众多家庭产品,智能音响的优势极为显著,其便携性与延展性决定着其形式更为多样,更适宜应用于家庭环境下,满足人们个性化、多元化的居住需求。
    基于上述三个方面,阐述了智能音响系统值得研究和探索的原因。
    1.4 本设计的主要工作
    本次毕业设计中的智能音响灯有两个显著特征:可实现网络接入以及内容服务的提供。且据此为语音交互提供支持,与此同时在智能家居中的运用过程中还能够以网页或语言等形式对设备开关予以控制,此外还可实现颜色控制,亮度控制。但决定语音交互的关键则在于语义解释以及语音识别功能。目前,市场中现有的智能音响大都是以互联网为载体实现与厂家语音引擎的相连或与其他厂商的语音引擎服务器相连,进而完成相应的操作,而绝非以自身的计算能力以及数据库为依托。所以在此次毕业设计中以“Raspberry Pi 3 Model B+模块”实现互联网接入,而后以语音的形式进行音量、开关等的控制,可进行网络音乐的在线播放,也支持天气预报的查询或有声书阅读等等。
    2.控制灯光的设计方案
    2.1 灯光部分的系统设计方案比较
    基于搜集到的与该课题相关的资料进行探究,在此列举四个设计方案进行比较,然后通过分析比较来决定出最终方案进行设计。
    方案一:利用单片机终端,采用按键方式控制灯光的功能。方案一采用单片机发送终端,此方案的开发难度低,成本低廉,有利于大范围推广使用。但是由于使用单片机终端,使用时需要随身携带设备,并且无法实现远距离操作,不具备方便快捷的舒适使用体验。
    方案二:使用手机上的蓝牙设备终端进行远程遥控控制,用手机蓝牙发送信息实现灯光的开启和灯光模式调节的控制。方案二利用手机蓝牙设备,无需随身携带额外的控制设备进行操作,可以远距离快速对家电进行调节与开关控制。然而其连接速度非常慢,并且距离信号受限。
    方案三:使用无线网络进行连接,用自建服务器和自建TCP服务器连接的方式实现对家电的开关控制,色彩选择,亮度控制。方案三的运用会促进系统便捷性与可行性的提升,且能达到远距离控制的目标,并且此方案成本低,易开发,无需支付任何费用。
    方案四:使用网页界面对灯光进行远程控制,依托于PHP与HTML进行灯光控制网页的设计,可实现灯管控制模式的随意切换,无受时间以及空间的限制,操作简单,可以实现远距离控制,当我们在学校或单位时,可以通过登陆网页点击相应指令,即可控制家中的音箱灯进行灯光模式转换。
    2.2 灯光部分的系统设计方案选择
    通过对比和分析以上的四种方案,方案二和方案三都有利用到手机终端设备,都具有适用于较远距离操控的功能,然而相比较方案二的蓝牙方式,方案三使用无线技术反应敏捷,连接速度快,开发成本也较低。方案一与方案二都具有造价成本低,易推广应用的优势,但是相比于无线连接设备的使用不便捷,可操控距离有限制,方案三的无线连接方案具备可远距离操控的功能,既可以通过语音控制,也可以通过网页端远程控制。在当下,大众追求智能化的舒适使用体验,则方案三可以良好的适用于现在人们所需求的理想控制。基于上文关于三种方案的探讨,最终以最后一种方案为该研究的设计方案,且用方案四来补充完善,实现多方式控制灯光。整体上方案的硬件框架如图2-1所示。
    2-1.png
    图2-1 系统整体框架图
    3.通过语音控制音响的方法概述
    3.1 语音控制音响的实现原理
    语音指令发出者以DuerOS系统设备[3](该设计中则依托于树莓派)为载体完成语音交互的操作,以唤醒口令进行设备的唤醒,实现语音控制指令向DuerOS设备的传送,DuerOS设备则经接口解析进行所接收数据的处理,而后实现向音响的传输。如3-1图所示:
    3-1.png

    图3-1 语音控制示意图
    语言指令发出者只需说“小度,小度”就能唤醒智能音响灯,并同时发出语言指令就能让它做出相应的动作回复用户。
    比如某用户喜欢王菲的歌,便可以以语音形式操控音响:小度,我想听一首王菲的歌曲,它接收到语音指令后就能立即响应并播放一首王菲演唱的歌曲,还能进行提醒用户进行收藏该首歌曲建立自己喜爱的歌单。
    在播放音乐的过程中,用户可以用语音指令告诉智能音响灯去调高或调低音量,并可以用语音令其退出播放音乐的模式或者让它切换到其他功能模式。
    此外,智能趣味音响灯还有着多样化的功能,比如以语音的形式进行天气情况查询、为幼儿讲故事以及收听新闻等等,所有的操作均可通过语音控制的方式来实现,使双手从繁杂的操作中解脱出来,且能够较为准确的解析语音指令。
    3.2 DuerOS系统介绍
    度秘是手机平台上的应用软件,为语音助手,DuerOS兼具语音端设备与嵌入端设备,为智能语音操作系统,更是完全意义上的语音交互操作模式。配备DuerOS的设备允许用户与搭载DuerOS系统的设备进行对话交互,并实现生活中常用的10个类别的100多个功能,其中主要包括音频和视频娱乐、各种信息的搜索、生活服务等日常生活常用的功能。并且依托于大数据,DuerOS支持持续的学习与完善,对百度中已有的大数据资源予以整合,逐步升级。DuerOS实现了各类场景与设备中的广泛运用,包括汽车、电视、扬声器以及冰箱等等。在2017年开展的国际消费类电子展会上,由百度开发的对话式人类智能操作系统DuerOS首次与人们见面,标志着智能音响设备的进一步发展。且百度还与北京小鱼儿科技有限公司建立合作联盟,计划在2018年春天将以DuerOS为基础的小鱼在家家庭机器人推广到中国市场。与此同时,为满足硬件厂商的多样化需求,DuerOS还搭建了DuerOS设备开放平台,让硬件厂商更方便的搭载DuerOS,并且百度DuerOS也为软件开发人员开放了DuerOS技能开放平台,方便开发者创建、发布个人或企业级技能,大幅降低使用门槛和开发速度,加快新兴智能语音产业的升级。
    4.控制灯光的具体实现
    4.1 软件编程环境
    PlatformIO IDE是新一代的IoT集成开发环境,支持mac linux windows。
    以插件的名义为Visual Studio Code以及Atom提供支撑。PlatformIO IDE编辑器同时支持IoT与Web的开发。可与PlatformIOIDE兼容内的硬件平台主要包含如下几种:
    Atmel SAM STM32 MSP430等等。支持的固件SDK则包含:Arduino,ARTIK SDK,mbed,Simba等等[4]。支持模块和外围传感器的库管理,可以进行代码智能检错、智能补全。
    4.2自建服务器设计与实现
    自建服务器主要作用是对接百度DuerOS技能平台,主要作用是处理用户语音交互过程中命令意图,并做出相应的反馈,本章将详细描述本自建服务器的功能、设计与实现方式。
    4.2.1 自建服务器需求分析
    用户以DuerOS系统的搭载实现语音交互,类如本系统中采用搭载DuerOS树莓派。树莓派中的DuerOS通过麦克风接收到指令发出者发来的语音指令,通过百度DuerOS技能服务平台处理后,判断是否是用户发布的自定义技能,如果检测到用户自建技能,进行处理后把用户意图的相关信息封装处理成Json格式的数据包,通过POST方法,将数据提交到自建服务器,自建服务器对POST方式提交来的数据进行分析、处理,并根据用户意图做出相应的回复,回复格式依然是POST方式,且数据封装格式为json数据包,在回复消息的同时,根据相关的意图的不同,封装的自定义数据项,然后通过TCP连接的方式,将该数据项发送到TCP服务器。
    4.2.2自建服务器实现方式
    为了更加快速地搭建网络服务及应用,本系统使用Node.js搭建系统平台[5]。就代码执行而言,Node.js是以Google V8 JavaScript引擎为依托来完成的,搭建而成的一个Javascript运行平台。为保证Node.js的可用性以及清洁性,其运用了非阻塞I/O模型,对于需运行于各类环境下的数据密集型实时应用程序而言更为适合。它将事件驱动的编程带入Web服务器,为Javascript提供强有力的支持,使其在更短时间内完成Web服务器的开发与运用,其优势集中体现在如下几个方面:
    1、Node.js通过采用推送技术(针对Web套接字)来实现实时Web应用程序,从而使用双向通道(即客户端和服务器)构建服务器端Web应用程序。其采用了以JavaScript为代表的开放式网络推栈技术,可在标准端口80上运行。该工具同样适用于内存使用和适用于多设备的数据密集型实时Web应用程序。
    2、Node.js有着出色的单线程处理能力,可在保证额外线程不变的基础上,依托于事件轮询机制一并进行任务的处理,且不仅有利于Javascript代码运行效率的提升,且速度更快。
    3、Node.js体量小,伸缩性较强,在实时数据交互过程中更宜运用。由需求分析阶段可知,本自建服务器主要处理接收到的json数据包,并对json数据包进行分析处理,根据检测到意图的不同,然后执行不同的动作
    自建服务器检测意图以“打开灯”为例,其他指令同理,主要程序如下所示:
    this.addIntentHandler('open_light', () => {
    var net = require("net");
    var client = new net.Socket();
    client.setEncoding('utf8');
    client.connect(9502,'bemfa.com',function()
    {
    client.write('cmd=publish&device_id=smart_led&message=ledOn\r\n');
               });
    let card = new Bot.Card.TextCard('正在为于淼主人开灯,请稍等');
    returnPromise.resolve
    ({
    card:card,
    outputSpeech: '正在为于淼主人开灯,请稍等'
    });
            });   
    4.3TCP服务器设计与实现
    TCP服务器是连接自建服务器与Web端和单片机的中枢,TCP服务器设计目标是接收设备订阅设备,接收设备推送信息,转发设备推送的消息到订阅该设备的设备,进而达成以设备进行设备控制的局面。
    4.3.1TCP服务器需求分析
    该TCP服务器主要作用是消息转发,通过与不同的设备建立TCP长连接,从而转发各消息发布设备发送的消息。系统模型如下图4-1所示:
    4-1.png
    图4-1 服务器模型图
    在本系统中,搭建的TCP服务器主要负责设备连接订阅和推送设备消息,即设备自定义设备标识设备ID,各种设备只要向服务器发布订阅指令,即可订阅此设备ID。当单片机设备与TCP服务器建立TCP连接,并在建立连接后发送订阅设备消息,该单片机设备订阅某个ID后,但凡各推送设备发往该ID的消息,TCP服务器负责转发该消息,将该消息转发给订阅用户,各订阅设备都可以收到该消息。
    4.3.2 TCP服务器设计实现
    TCP(传输控制协议)是以连接为核心的协议,用于在一对用户之间可靠地传输数据,并且TCP服务器等待来自TCP客户端的连接并接受传入TCP连接。在本系统中TCP服务器由PHP[6]语言编写,且运行于php-cli模式中。
    PHP也就是超文本预处理器,是编程语言的一种,其支持Web开发人员对与数据库相关的动态内容的创建。普遍而言,PHP是用于开发以Web为基础的软件应用程序。使用PHP][7]进行服务器端编程的原因有很多,首先它是一种免费的语言,不需要许可费用,因此使用它的代价很小。PHP也具有非常好的在线文档,并具有良好的功能框架。这使得该语言相对容易学习,并且在线支持得很好。并且它可以与许多不同的数据库语言(包括MySQL)进行交互。PHP和MySQL都可以与免费许可的Apache服务器兼容,且Unix、Windows以及Linux上同样支持PHP的正常运行。
    在本系统中采用PHP版本为PHP5.6.33,且采用了PHP的Swoole框架,旨在创建多线程、非阻塞的网络IO服务器。为了更好的使TCP服务器运行在多线程模式下,同时采用了IPC通信机制与Swoole框架下的数个横向数据结构,可提升多进程并发编程的便捷性。Swoole支持以PHP为依托进行新服务器建构,提供类似于Apache的功能,接收指令作出相应的反馈,然而Swoole_Server仅支持cli模式下的运行,这是由于作为一个相对独立的服务,Swoole_Server本就是完全意义上的网路服务,无需依赖于Apache,因此其仅支持cil模式下的运行,且在具体的执行过程中无需依赖于浏览器。通过Pecl install Swoole指令可实现Swoole的迅速安装。
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image015.gif在本系统中使用Swoole搭建TCP服务器[8],首先需要对Swoole进行配置。配置信息如下所示:

    $config = array(
      'daemonize'=> 1,
    'worker_num' =>1,
      'log_file'=> '/tmp/swoole.log',
    'open_eof_check' => true,
    'package_eof' => "\r\n",
    'heartbeat_check_interval' => 30,
      'heartbeat_idle_time'=> 360
    );
    其中当daemonize => 1时,也就是进入了程序后台执行模式,程序将在后台继续运作。worker_num=> 1,file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image016.gif为设置了一个进程。log_file为当程序后台执行时所输出的日志位置。open_eof_check=> true,也就是启动了EOF检测,若将该选项设定为True,则服务器端将就客户端所传递的数据信息予以检测。若数据包是以package_eof为结尾,对应的字符串才会实现向Worker进程的转移。若设置为heartbeat_check_interval字段,即心跳检测启动,其单位为s,若该服务器将客户端信息接收的最大时间设置为30s,服务器端就会强制关闭此连接。以'heartbeat_idle_timez字段为基础,进一步结合heartbeat_check_interval的情况下,表示连接过程中所允许的最大空闲时间。在swoole编写的php程序中,主要关键函数有:
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image017.gif

    functionmy_connect($serv,$fd, $from_id){}
    functionmy_receive($serv,$fd, $from_id, $data){}
    functionmy_close($serv,$fd, $from_id){}
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image018.gifSwoole_Server为异步服务器,因此其php函数的执行是寓于事件监听过程中,举例说明若有新连接发生,OnConnect函数回掉事件回调予以执行,若有新数据传递给服务器端,则OnReceive函数回掉事件回调予以启动。在本系统中自定义具体订阅指令为cmd=subscribe&device_id=smart_led\r\n。设备数据推送指令为cmd=publish&device_id=smart_led&message=ledOn\r\n,设备连接保持指令cmd=Keep&message=alive。本系统设计采用长连接方式。具体实现关键函数如下:
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image019.gif

    if($cmd=="keep"){
               $res="cmd={$cmd}&res=1\r\n";
           }      
    if($cmd=="subscribe"){
                $sess_list[$topic][$fd]=$fd;
                $kv[$fd][$topic]=$topic;
               $d_list[$fd]['device_id']=$device_id;
                $d_list[$fd]['eid']=$eid;
               $res="cmd={$cmd}&res=1\r\n";
            }
    if($cmd=="device_num"){
                $num=count($sess_list[$topic]);
                $res="cmd={$cmd}&res={$num}\r\n";
            }
    if($cmd=="publish"){
                $sub_list=$sess_list[$topic];
    foreach($sub_listas $conn){
                   $message_to="cmd=publish&message={$message}";
                                $serv->send($conn,$message_to."\r\n");
                }
                $res="cmd={$cmd}&res=1\r\n";
            }
            $serv->send($fd,$res);
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image019.gif

    4.4Web端远程控制设计与实现
    本章主要就Web端控制系统进行描述,详细阐述LEDWeb端控制的设计方法和实现方式。
    4.4.1Web端系统概述
    音箱对灯的控制有局限性,只能通过人与音箱的交互才能控制灯光,故本系统还设计了通过网页端控制灯光的方式,网页端控制灯光,消除了音箱控制的局限性,可以通过PC端设备或移动终端设备等以联网的方式进行访问灯光控制台,以起到控制灯光的目的。在本系统中,Web端系统主要通过编写网页端代码实现,联合包含PHP语言在内的多种手段共同进行程序的编写,使得用户通过控制按钮的动作,从而发布消息到TCP服务器[9],再有服务器执行转发操作,从而把消息转发给单片机设备,进而达到控制灯光的目的。
    4.4.2Web端远程控制实现方式
    Web端数据传输代码有PHP编写实现,通过Javascript、CSS以及HTML的共同编写来实现网页部分[10]。在本系统中代码运行在nginx上,且PHP环境为PHP5.6.33,Nginx版本nginx/1.4.4。现阶段全球覆盖率最广的Web服务器中就包含Nginx,作为Web服务器的一种,其具有友好的配置格式,比其他Web服务器在设计上更现代化。Nginx最突出的特性之一是它可以为快速扩展的http服务器配置负载均衡。Nginx负载均衡支持跨不同服务器分配流量,这使用户可以扩展他们的应用程序,同时获得http冗余。服务器端的设置也将变得快速和简单。Nginx Web服务器在提供静态资源访问方面非常高效,并且可以适应动态内容。如果网站中大部分内容是静态的,并且需要支持大量资源访问,以Nginx作为Web服务器必然会促进系统运行效率的提升,这也是本系统选择Nginx的主要原因。
    本Web服务器运行环境是阿里云主机centos7.0,部分样式设计采用CSS,布局即色彩搭配采用bootrap前端框架来实现[11],特点是简单灵活,使Web开发更便捷、高效。使用bootrap,只需要简单引入即可
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image020.gif

    <scriptsrc="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <!--加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <scriptsrc="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image021.gif

    具体到HTML之中,为捕捉用户点击的按钮选项,进行form 表单的构建,从而根据按钮的‘name’属性,由PHP捕捉到具体的按钮值,再以Web端PHP脚本作为客户端与TCP服务器建立连接,发送预定义指令到TCP服务器,再由TCP服务器将指令转发给单片机,从而达到控制灯光的目的。定位到用网页来控制灯光的主要程序说明(以“打开灯”这一指令讲述):
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image022.gif

    <formclass="form-inline" method="POST" action="">
    <buttontype="submit" name = 'open_light' class=" ">打开灯</button>
    <buttontype="submit" name = 'close_light' class=" ">关闭灯</button>
    </form>
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image023.gif

    PHP处理HTML提交来的数据的部分主要程序(以开灯为例来讲解):
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image024.gif

    if(isset($_POST['open_light'])){
        $service_port = 9502;
        $address = 'bemfa.com'; //TCP云平台地址
        $socket = socket_create(AF_INET,SOCK_STREAM, SOL_TCP); //创建socket连接
        $result = socket_connect($socket, $address,$service_port); //socket连接
    $in = "cmd=publish&device_id=smart_led&message=ledOn\r\n";//要发送的内容
    socket_write($socket,$in, strlen($in)); //发送数据
    }
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image024.gif

    4.5单片机来控制灯光
    4.5.1控制流程
    系统通电后,系统开始初始化,通信模块ESP8266与设定好的局域网相连接。在连接成功后,ESP8266则加载Socket连接于远程服务器。连接成功后,ESP8266接受相应的控制命令,对灯光进行控制。单片机通过网络通信模式控制示意图如图4-2所示。
        4-2.png
    图4-2控制流程示意图
    4.5.2控制模块
    系统采用ESP-12E WiFi模块作为该系统的网络通信模块和控制单元,该模块使用安信可公司生产的32位超低功耗网络通信模块[12]。控制模块如图4-3所示。
    4-3.png
    图4-3 ESP-12E WiFi模块
    该芯片具有以下特点:
    (1)与规范性与系统性的TCP/IP协议以及IEEE802.11 b/g/n 协议兼容,方便网络数据的传输。
    (2)采用超低功耗的MCU单元,为实时操控系统提供支撑,该模块不仅拥有联网功能,还能像单片机一样作为独立的控制单元对相应引脚进行控制。
    (3)ESP-12E WiFi模块提供了一套完整的WiFi通信解决方案[13],不仅如此,在Lua语言的作用下该模块进行了ESP8266硬件操作API的封装,提升了开发人员快速产品设计的能力,从根本上规避了软件开发人员与硬件的接触,十分方便软件工作者进行操作。
    (4)模块整体体积小,集成度高、价格低廉、功能强大、性能稳定、这些特点为嵌入式的开发带来了无限的可能。
    4.5.3控制程序
    本次设计中的灯光所能实现的功能主要由单片机ESP8266来控制,本次设计的灯光部分能实现开关,和七种颜色的转换,还能调节亮度。下边通过介绍程序来说明它是怎样工作的。
    首先初始化处理单片机中的WiFi模块,程序摘要如下:
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image029.gif
    voidstartSTA()
    {
    WiFi.disconnect();
    WiFi.mode(WIFI_STA);
    WiFi.begin(DEFAULT_STASSID, DEFAULT_STAPSW);
    }
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image030.gif

    然后单片机去连接TCP服务器,程序摘要如下:
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image031.gif

    if(TCPclient.connect(TCP_SERVER_ADDR,atoi(TCP_SERVER_PORT)))
    {   
    //单片机告诉TCP服务器,单片机要订阅设备ID为smart_led。
    sendtoTCPServer("cmd=subscribe&device_id=smart_led\r\n");
    preTCPConnected = true;
    }
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image032.gif

    如果连接失败,将自动进行重连,部分程序如下:
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image033.gif

    else
    {
    TCPclient.stop();
    preTCPConnected = false;
    }
    if(preTCPConnected == true)
    {
    preTCPConnected = false;
    preTCPStartTick = millis();
    TCPclient.stop();
    }
    else if(millis() - preTCPStartTick> 1*1000)//重新连接{
    startTCPClient();
    }
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image034.gif

    单片机接收从TCP发来的数据,做出判断并执行相应指令,关键程序如下:
    file:///C:/Users/OMEN/AppData/Local/Temp/msohtmlclip1/01/clip_image023.gif

    if((TcpClient_Buff.length() >= 1) && (millis() -TcpClient_preTick>=200))
    {  //data ready
    TCPclient.flush();
    if((TcpClient_Buff.indexOf("message=ledOn") > 0)) {
    //执行开灯函数
    turnOnLed();
    }else if((TcpClient_Buff.indexOf("message=ledOff") >0))
    //执行关灯函数
    }//省略其他指令程序
    }
    TcpClient_Buff="";
    TcpClient_BuffIndex = 0;
      }
    }
    5.电路原理:
    在该电路中D1,D2,D4,D6为整流二极管,C19,C13为滤波电容,C5,C7,C12,C18为高频退耦电容;R1,R5,R22为总音量、高音、低音调节电位器;U1,U2是两个声道的功放集成电路;R15,C17,R21为低音滤波电路,R3,C4,R6为高音滤波电路;R14,C6,R4(R2,C16,R20)为输入耦合;R8,R9,C8(R16,R,C14)为输入偏置电路;R10,R9(R16,R18)为反馈电阻,改变R10与R9,R18与R16的比值可以改变两声道的放大倍数。音响原理图如下图5-1所示。
    f.png
    图5-1 音响原理图

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 08:24 , Processed in 0.109841 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.