期刊鉴别 论文检测 免费论文 特惠期刊 学术答疑 发表流程

基于嵌入式的水上VHF自动播报系统的设计(2)

时间:2016-09-27 13:53 文章来源:http://www.lunwenbuluo.com 作者:董涛 点击次数:


  3.1 操作系统搭建
  树莓派使用主板上的bootload来引导烧录在MicroSD卡上的操作系统镜像来启动系统。在本设计中使用的是Raspbian系统,Raspbian是基于Debian GNU/Linux的免费操作系统,它面向Raspberry Pi硬件(armhf处理器架构)做了优化,内置了多个常用的软件包和预编译软件,非常适合于常用的web服务器、物联网设备控制等系统设计和开发。 
  Raspbian系统安装:首先从Raspbian官方或者国内镜像下载Raspbian系统包,然后在windows系统下使用Win32DiskImag-er将.img文件写人MicroSD卡;再将卡插入树莓派MicroSD插槽,上电后Raspbian会自动启动。在完成系统安装之后,通过SSH登陆树莓派设置好静态lP地址并安装VNC Server,方便后期使用vnc客户端远程登陆至树莓派x desktop上进行操作。
  本设计使用Linux+Nginx+SQLite+Python+Django架设服务器来取代常用的LAMP(Linux+Apache+Mysql+PHP)的方式来架设Web服务,因为该方式较LAMP来说资源消耗低,开发起来也比较便捷。树莓派上安装Nginx/Django/SQLite/Python的方法网上较多,此处不赘述了。
  3.2 数据库设计
  本设计使用SQLite作为数据库系统,SQLite是一款轻量化的数据库系统,其设计目标就是使用在嵌入式系统中,资源占用小但功能强大,它独立、开源并支持多种开发语言,是轻量级嵌入式开发较为合适的数据库系统。
  SQLite数据库为单文件数据库,本设计数据库名为playlist.db,其中包含两个主要的表:tasklist(播放任务)、complist(已播放)表。其中,tasklist表主要有以下字段:
  playtime TEXT//计划播报时间
  freq
  INTEGER//播报频率
  num
  INTEGER//播报次数
  title TEXT//播报内容标题
  text TEXT//播报内容
  其中playtime为播报时间,格式为YYYYMMDDHHMM,如201601011330;freq播报频率指间隔多少分钟播出一次(根据实际播出要求,该频率一般为5-120分钟);nun指一共播出多少次;title限定20汉字以内;text限定200汉字以内。
  eomplist表用于保存已播放内容,仅需playtime、title和text字段。
  根据日常使用经验,系统主要是针对tasklist表中的内容进行增、删、改操作,即向播放列表中加入播放条目、播放完成后删除播放条目、对未播放内容进行修改,数据纪录条数较少,检索方便。complist表主要是增加数据纪录操作,由于该表是每次播放完成后将已播放内容加入,数据纪录天然按照播放时间(playtime)字段增序排列,不需要进行额外排序工作。
  3.3 WEB服务器设计
  WEB服务框架采用Django。Django是一个开放源代码的Web应用框架,由Python写成,采用了MVC(Model View Control-ler,模型、视图、控制器)的软件设计模式。选用Django的原因是使用框架封装了控制层,数据调用等操作只需调用相应的方法即可完成,另外有大量的第三方插件可以使用,大大的提高开发的效率。
  WEB服务器采用Nginx。Nginx是一款轻量级的Web服务器,占用内存仅几兆,非常适合于树莓派上构建WEB服务。Django通过Nginx+uWSGI来部署,Nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。Nginx把所有静态请求自己来处理,非静态请求通过uWSGI传递给Django,由Django来进行处理,从而完成一次WEB请求。
  WEB页面设计比较简单,直接借用一个基础的论坛发布页面,简单修改后调用数据库内容显示在页面上,可以对每个条目进行增、删、改操作。
  3.4 播报软件设计
  播报软件使用Python软件开发,Python是一种面向对象、解释型计算机程序设计语言,该语言简洁、易用和可扩展,比较方便使用于WEB开发应用中。
  播报软件主要由数据库访问和文本TYS输出组成:
  3.4.1 数据库访问
  系统运行中正常的数据库访问涉及tasklist表的增加、删除和更新及complist表的增加操作。系统上电运行之后,每分钟查询一次tasklist表,比对是否存在playtime与当前时间相符的记录,如果相符则将该条记录中text字段内容(播发内容)输出,播发完成之后,将该条记录复制进complist表,表明该条播发任务已经完成。然后查看nun字段是否大于1(需要多次播发),如果不大于则表明需要多次播发的任务已经完成,删除该条记录;如果没有完成则将nun字段内容减一,将playtime字段时间加上freq内容(构成下一次播发时间);最后重新更新该条记录,形成一条新的播发任务记录。
  3.4.2 文本TTS输出
  通过将text字段内容(文本)向串口输出至SYN6658芯片实现文字到语音的转换后从VHF船台机播出主要由以下两个过程完成:
  3.4.2.1 FFF按钮的按下
  根据树莓派GPIO定义,使用GPIO 0(第11脚)作为控制脚,与继电器模块IN脚相接。
  GPIO.setmode(GPIO.BOARD)//使用GPIO.BOARD模式
  GPIO.setup(11,GPIO.OUT)//将11脚(GPIO 0)设为输出模式
  吸合继电器时使用:GPIO.output((11,GPIO.LOW),此时VHF船台机FFF与GND导通,相当于PTT按钮按下,VHF船台机处于发送模式。
  释放继电器时使用:GPIO.output(11,GPIO.HIGH),此时VHF船台机PTT与GND断开,相当于PTY按钮释放,VHF船台机处于接收模式。
  3.4.2.2 串口文本输出
  树莓派原生有一个串口,为GPIO 14(TXD)和GPIO 15(RXD),但该串口默认为调试口,需要在树莓派配置界面中将串口调试功能关闭。将GPIO 14与SYN6658模块RXD连接,GPIO 15与SYN6658模块TXD连接,波特率默认为9600bps。
  树莓派与SYN6658之间通信使用数据帧的方式,数据帧格式如下表:
  树莓派向串口输出控制播发的过程为:
  ser=serial.Serial("/dev/uyAMA0",9600)
  ser.write('\xFD')//输出固定帧头0xFD
  ser.write('\x00\x66')//数据区长度为102字节(发送50个汉字)
  ser.write('\x01\x00')//以GB2312编码格式合成播放
  ser.write(data)//输出待发送文本
  通过输出不同的命令字可以控制芯片播发、停止、暂停、恢复等合成文本操作。
  输出0xFD 0x00 0x01 0x21命令可以查询芯片工作状态,芯片收到查询指令后,返回0x4E表明仍在合成过程中,返回0x4F表明处于空闲状态。
  合成工作完成后表明所有待发送的文本已经全部提交合成完毕,如果系统工作正常,那么该条航行信息应该通过VHF船台机向附近水域播发完成,此时将FTT按钮释放,整个播发过程结束,系统进入下一次播发的准备状态中。  

  •   论文部落提供核心期刊、国家级期刊、省级期刊、SCI期刊和EI期刊等咨询服务。
  •   论文部落拥有一支经验丰富、高端专业的编辑团队,可帮助您指导各领域学术文章,您只需提出详细的论文写作要求和相关资料。
  •  
  •   论文投稿客服QQ: 论文投稿2863358778 论文投稿2316118108
  •  
  •   论文投稿电话:15380085870
  •  
  •   论文投稿邮箱:lunwenbuluo@126.com

联系方式

  • 论文投稿客服QQ: 论文投稿2863358778
  • 论文投稿客服QQ: 论文投稿2316118108
  • 论文投稿电话:15380085870
  • 论文投稿邮箱:lunwenbuluo@126.com

热门排行

 
QQ在线咨询
咨询热线:
15380085870
微信号咨询:
lunwenbuluoli