基于Flask与树莓派的智能交通控制平台
摘 要: 针对目前智能交通发展迅速,功能扩展要求较高,一般框架搭建的智能交通控制平台功能较为单一,提出基于Flask框架的智能交通控制平台。Flask是随着Python兴起的一种小型可扩展框架,功能可根据相应的扩展包進行扩展,从而构建B/S模式智能交通控制系统。该控制系统可以通过IPv4或IPv4映射后的IPv6地址进行Web访问登录,并进行方案选择,数据查询与控制进行多线程独立分开,互不影响,从而更加便捷地实现双协议远程控制。
关键词: Flask; 智能交通; 树莓派; B/S; 远程控制; 多线程
中图分类号: TN876?34; TP39 文献标识码: A 文章编号: 1004?373X(2018)13?0088?04
Abstract: With the rapid development of intelligent transportation, the higher requirement is proposed for functional expansion, but the function of the generally?established intelligent traffic control platform is relatively single. Aiming at this problem, an intelligent traffic control platform based on Flask framework is proposed. Flask is a small scalable framework, which is developed with Python. The function of the framework can be extended according to the corresponding extension package, so as to construct the B/S mode intelligent traffic control platform. The Web access and login, and scheme selection are performed for the control system through IPv4 address or IPv6 address after IPv4 mapping. The data query and control are independently separated for multithreading, and mutually affected, which can realize the dual?protocol remote control conveniently.
Keywords: Flask; intelligent traffic; Raspberry Pi; B/S; remote control; multithreading
0 引 言
当前我国城市和城市交通的发展处于挑战和机遇并存的关键历史阶段[1]。一方面,随着城镇化、机动化的持续快速发展,城市交通拥堵加剧、事故频发,面临着严峻挑战;另一方面,我国城市处在老城改造、新城建设的城市大发展时期,是实现智能交通的最佳时机。智能交通的主要特点是将先进的信息技术、数据通信传输技术、电子控制技术、传感器技术以及计算机处理技术等有效的综合用于整个交通系统,从而建立起一种在大范围内、全方位发挥作用的实时、准确、高效的智能交通综合管理系统。其目的是使人、车、路密切配合、和谐统一,极大地提高交通运输效率,保障交通安全,缓解交通问题,改善环境质量和提高能源利用率。
树莓派Raspberry Pi支持多语言编程[2],功能强大,便于携带且性价比高。树莓派的灵巧和其强大的扩展性,使它可以应用在多个领域。基于树莓派的智能交通控制平台,就是树莓派在智能交通上的新应用。同时,树莓派官方强调最适合的编程语言是Python,所以这里将基于Python的Flask框架与树莓派相结合[3],Flask是一种微小框架[4],它具有极强的可扩展性,从而使开发变得简单易行且无冗余功能。本文所提及的智能交通信号灯控制系统使用了基于Raspberry Pi硬件平台,通过Web服务展现给用户,该平台采用Web服务器[5?6]、控制系统、数据库于一体的控制体系,通过在服务端构建Flask环境,形成B/S工作模式,客户可以通过浏览器就可以远程控制系统。
1 Flask开发环境搭建
Flask是基于Python的框架,编程语言使用Python,需要搭建一个Python集成开发环境,本文直接使用树莓派官方自带的Python 3.5进行开发。安装Flask最便捷的方式是使用虚拟环境。虚拟环境是Python解释器的一个私有副本,这个环境安装的扩展包不会与全局的解释器相互影响。安装及配置如下[7?8]:
¥ python?m venv myvenv
¥ source venv/bin/activate
¥(venv)¥ pip install flask
第一行为创建虚拟环境,第二行为激活虚拟环境,第三行为在虚拟环境中安装Flask。
同时需要将主要的扩展包进行安装[9]:
¥(venv)¥ pip install flask?bootstrap
¥(venv)¥ pip install flask?sqlalchemy
¥(venv)¥ pip install flask?mail
这三行代码主要将网页框架、数据库管理、邮件扩展包进行安装。
2 智能交通控制平台总体框架
本文提出的智能交通控制平台的总体系统由浏览器客户端、Web服务器、交通灯控制系统组成,框架如图1所示,通过B/S实现[10]对交通灯的智能控制。

該系统具有以下特点:
1) Flask框架。采用最新的Flask框架搭建Web服务器,简单轻便,功能扩展通过扩展包就可轻易实现。
2) 服务器与控制系统集于一体。基于树莓派优越的性能,将服务器与控制系统搭建于同一硬件平台,可实现实时控制和数据实时传输,便于后期的管理与维护。
3) 支持地址映射的Web服务器。在树莓派硬件平台上搭建Web服务器,通过Flask内建函数将IPv4地址映射成IPv6地址,从而实现支持双协议。
3 智能交通控制平台功能实现
3.1 硬件环境搭建
在树莓派SD卡上安装官方自带的Raspbian系统,使其成为卡片式开发板,为后续开发提供平台;装载路由器,在浏览器登录路由器设置页面192.168.2.1,配置路由器后保存信息,注意输出端口一端接树莓派,另一端接操作计算机,该步骤的目的是为了保持树莓派和操作计算机位于同一网段。
3.2 路由实现
Web浏览器把请求发给Web服务器,Web服务器再把请求转发给Flask程序实例,但程序需要知道每个URL请求执行哪些代码,Python提供了一个URL到函数映射关系函数@app.route(),处理URL和函数的联系。
3.3 前端网页框架
将Flask?Bootstrap框架与Jinja2模板结合,可以搭建一个交互式比较好的网页框架,同时扩展Flask?WTF进行表单处理,实现跨站请求伪造保护,即程序设置一个密钥,Flask?WTF使用这个密钥生成加密令牌,再用令牌验证请求中表单数据的真伪。
3.4 数据库
这里选用SQLite数据库和Flask?SQLAlchemy管理数据库,数据库中定义了角色和用户两种模型,用户模型是存储用户,角色模型用来给用户分类赋予不同权限。为了方便数据库的更新与迁移,这里将扩展Flask?Migrate包,使数据库更便于更新管理。
3.5 用户认证系统
建立用户认证需要Flask?Login进行用户会话管理,使用Python自带的Werkzeug计算密码散列值并核对,每当用户登录时,程序就会自动核对,在保证密码安全的情况下进行登录认证。当用户第一次注册时,会使用itsdangerous生成确认令牌,通过Flask?Mail生成邮件发送给用户,通过用户确认来完成注册。
3.6 意见评论系统
将评论系统添加进智能交通控制平台中,方便用户进行反馈及交流。本文设计成登录用户才有权限评论,在页面最上端添加一评论表单,方便用户快速评论留言,评论系统设计在author的蓝本当中,每篇评论都有固定链接,同时意见区首页自动显示最近的20条评论。
同时,给用户扩展了关注功能,使得用户可以关注相关人员的评论,首页也设计了所关注的人一栏,使用户可以有选择的查看相应评论。
3.7 控制系统
控制系统也将采用单独蓝本设计,设计在蓝本control中,使功能设计与整体分开,同时控制系统将直接控制树莓派引脚,通过控制平台选择不同方案,实现对交通灯的控制。
控制区将预设三种方案供用户(有操作权限)选择,分别为正常模式、高峰模式、检修模式,其中正常模式具体参数为:直行绿灯时间20~25 s,左行绿灯时间15~20 s,右行一直绿灯,东西为一组,南北为一组,两组之间交替变化,组内之间直行、左行相互变化,高峰方案类似,只是不同方向放行时间不同,检修模式为一直黄灯。自定义方案用户可根据具体情况自行设计,从而使方案更加灵活。控制系统流程图如图2所示。

算法方面采用多线程技术,因为服务器路由功能与控制系统会出现并发控制,多线程技术可以实现这一要求,同时,对于方案选择也采用多线程控制,能实现方案的及时改变,但方案的改变必须在上一方案执行完一次才能实现,在实际道路中不影响交通秩序和方案的实施。
该控制系统可以通过Web服务进行远程通信控制,Web服务器的基本原理是:用户在浏览器中输入地址,随后浏览器向Web服务器发出HTTP请求,Web服务器针对该请求做出HTTP响应,最后浏览器对响应的内容进行解析,以网页的形式呈现给用户。浏览器和Web服务器之间通过TCP协议进行通信,TCP协议是一种面向连接、可靠、基于字节流的传输层通信协议。Web服务器监听特定的网络端口,当浏览器向Web服务器发出请求时,两者之间通过TCP协议建立连接,然后传输HTTP请求报文和HTTP响应报文。Web服务器实际上也是一个TCP服务器。本文系统设置服务器IP地址为192.168.2.103,端口为5000。
该服务器可以将IPv4地址映射成IPv6地址,为[::ffff:192.168.2.103],其原理如下:实现地址映射有两种方式,第一种是直接在Flask的内置run函数传递IPv6地址参数,即在原有的IPv4地址前添加[::ffff:],从而实现IPv4到IPv6的映射;第二种方式是直接在运行程序时实现映射,运行代码为:
sudo python3 manage.py runserver–host ::ffff:192.168.2.103
4 测试运行
本文以控制系统和服务器于一体的树莓派为核心,搭建一个简易测试环境,树莓派安装系统为官方Raspbian系统,该系统以Linux为核心,基本操作与Linux相似,交通灯用LED灯进行模拟[11]。
在Raspberry Pi平台下,输入命令“ifconfig”,即可得到当前设备的IP地址,如图3所示。由图可见,该设备的IP地址为192.168.2.103,故映射的IPv6地址为[::ffff:192.168.2.103]。这里服务器默认端口为5000。

IPv4,IPv6地址访问测试结果如图4,图5所示。

运行测试结果如图6所示。

分别测试了三种工作模式下的运行情况,正常模式各路口切换时间均匀,高峰模式实现了直行路口通行时间长,检修模式可以保持状态稳定,且三种模式可以正常切换,在方案执行的同时,不影响意见区功能的实现。该测试结果表明,控制功能基本实现,评论系统良好,用户认证系统功能全部实现,在该智能交通控制平台B/S模式下,可以较好地实现远程控制。
5 结 论
本文提出的智能交通控制平台在B/S模式下,基本实现了用户认证功能、意见评论功能、控制功能,能满足一般交通路口的需求。但在较多用户访问时会出现速度慢,服务器崩溃的现象。下一步将研究高并发[12],实现超多用户访问,解决上述问题。同时加入对摄像头的控制,Web客户端界面功能也不够完善,后期将会加入多路口状态监测,可以试试查看各路口的方案选择情况以及通行状况。在条件允许的情况下,将加入车流量检测系统,这样结合车流量,可以自定义出符合情况的方案或者选择系统提供的最佳方案,将通行方案变得更加灵活多变,更加贴近实际。
参考文献
[1] 冯蓉珍.物联网综合实训平台的设计与实现[J].工业控制计算机,2014,27(6):28?29.
FENG Rongzhen. Design and implementation of integrated training platform for Internet of Things [J]. Industrial control and calculation, 2014, 27(6): 28?29.
[2] RICHARDSON M,WALLACE S.爱上Raspberry Pi[M].李凡希,译.北京:科学出版社,2013.
RICHARDSON M, WALLACE S. Fall in love with Raspberry Pi [M]. LI Fanxi, Translation. Beijing: Science Press, 2013.
[3] 李文胜.基于树莓派的嵌入式Linux开发教学探索[J].电子技术与软件工程,2014(9):219?220.
LI Wensheng. Research on embedded Linux development teaching based on Raspberry Pi [J]. Electronic technology and software engineering, 2014(9): 219?220.
[4] 刘历,章国宝.基于Flask的智能家居服务系统软件设计[J].工业控制计算机,2017,30(2):109?110.
LIU Li, ZHANG Guobao. The design of smart home service system software based on Flask [J]. Industrial control computer, 2017, 30(2): 109?110.
[5] 沈彤,朱昊,胡静,等.物联网智能家居系统演示平台的设计与实现[J].南京师范大学学报(工程技术版),2013,13(1):20?24.
SHEN Tong, ZHU Hao, HU Jing, et al. Design and implementation of demonstration platform for Internet of Things smart home system [J]. Journal of Nanjing Normal University (engineering and technology), 2013, 13(1): 20?24.
[6] 冯兴利,锁志海,徐墨.基于PHP+MySQL的Web系统安全防范及全站静态化[J].现代电子技术,2012,35(8):25?27.
FENG Xingli, SUO Zhihai, XU Mo. Security and Website static technology of Web system based on PHP+MySQL [J]. Modern electronics technique, 2012, 35(8): 25?27.
[7] 汪鑫,彭丽薇.基于树莓派的网络监控系统的研究与实现[J].硅谷,2014(14):25?26.
WANG Xin, PENG Liwei. Research and discovery of Raspberry Pi based network monitoring system [J]. Silicon valley, 2014(14): 25?26.
[8] 严萍,张兴敢,柏业超,等.基于物联网技术的智能家居系统[J].南京大学学报(自然科学版),2012,48(1):26?32.
YAN Ping, ZHANG Xinggan, BAI Yechao, et al. Smart home system based on Internet of Things technology [J]. Journal of Nanjing University (natural science edition), 2012, 48(1): 26?32.
[9] 郑世珏,徐虹.基于树莓派的远程监测系统的设计与实现[J].微型机与应用,2014(19):53?56.
ZHENG Shijue, XU Hong. Design and implementation of remote monitoring system based on Raspberry Pi [J]. Microcomputer and applications, 2014(19): 53?56.
[10] 钟新跃.基于C/S架构的停车场车位信息发布与管理系统[J].计算机测量与控制,2013,21(7):1957?1958.
ZHONG Xinyue. Publishing and management information system of parking lot information based on C/S architecture [J]. Computer measurement & control, 2013, 21(7): 1957?1958.
[11] MAKSIMOVI? M, VUJOVI? V, DAVIDOVI? N, et al. Rasp?berry Pi as Internet of Things hardware: performances and constraints [J]. Design issues, 2014, 3: 1?6.
[12] 杨小娇.轻量级高并发Web服务器的研究与实现[D].南京:南京邮电大学,2014.
YANG Xiaojiao. Research and implementation of lightweight high?concurrent Web server [D]. Nanjing: Nanjing University of Posts and Telecommunications, 2014.
[13] 孟利民,包轶名.基于局部特征的图像插值算法在B/S视频监控中的应用[J].浙江工业大学学报,2015,43(2):217?221.
MENG Limin, BAO Yiming. Application of image interpolation algorithm based on local features in B/S video surveillance [J]. Journal of Zhejiang University of Technology, 2015, 43(2): 217?221.