内容正文:
第四章
Chapter 4
信息系统的搭建实例
1
目录
1
2
搭建信息系统的前期准备
搭建信息系统
3
完善信息系统
复习回顾
开发“意愿”
切实可行的“规划”
分析、论证、清晰化的过程
需求分析
可行性分析
开发模式的选择
概要设计
详细设计
做什么
是否有必要做,是否可行
大概怎么做
具体怎么做
B/S架构
C/S架构
想法
搭建信息系统前期准备
胸有成竹
搭建信息系统
现实
搭建信息系统
从何入手?
先搭硬件,再写软件
搭建信息系统
硬件
服务器
为信息系统中的用户提供各种服务,如应用程序的处理、访问数据库管理系统、打印服务等。
网络设备
通过网络来完成数据的传递。
网络设备主要包括:交换机、路由器、双绞线、光缆。
传感设备和智能终端
传感设备,即传感器,是重要的输入设备,负责检测并将信息变换成电信号或其他形式信息输出。
智能终端大部分功能依靠传感器实现,包括输入、处理、存储、输出四个部分。
硬件
搭建信息系统
硬件搭建
Micro:bit主板
Micro:bit掌控IO扩展板
LM35温度传感器
IOT(物联网)模块
服务器(普通pc)
搭建信息系统
考虑运营成本和数据存储和网络交互要求较低,可用普通PC机代替专用服务器。数据库选择python自带的嵌入式开源数据库SQLite
服务器
服务器(普通pc代替)
硬件搭建——服务器
搭建信息系统
硬件搭建——网络设备
IoT(Internet of Things,物联网)模块:可以用于自身不能联网、但是有串口功能的智能硬件,原理是串口转wifi物联网。 IOT四个针脚:Vcc、Gnd、TX和RX
搭建信息系统
硬件搭建——网络设备
名称 功能描述
TX 发送端
RX 接收端
GND 电源负极
VCC 电源正极
颜色 状态
红色 没有正常运行
蓝色 正在连接WIFI
绿色 正常工作状态
紫色 Mqtt连接断开
搭建信息系统
硬件搭建——智能终端
Micro:bit 既支持传感器的采集,也支持对LED、蜂鸣器之类的执行模块的控制。
本例我们利用扩展板连接IoT模块和温度传感器。
搭建信息系统
硬件搭建
搭建信息系统
小马设计了“校园噪音检测信息系统”,下列设备可用于采集该系统声音数据的是( )
A.蜂鸣器
B.湿度传感器
C.网络交换机
D.声音传感器
课堂练习
D
小马搭建“校园噪音检测信息系统”,要求使用数据库存储每日温度数据,则该系统搭建服务器时下列软件中无须安装的是 ( )
A.数据库管理系统
B.传感器驱动程序
C.操作系统
D.网卡驱动程序
课堂练习
B
搭建“教室温度湿度监测系统”,实现登录系统实时查看教室的温度和湿度,该系统使用的硬件配置方案中不可缺少的设备是( )
A.智能终端、温度传感器、交换机
B.温度传感器、湿度传感器、图像传感器
C.温度传感器、图像传感器、计算机
D.智能终端、温度传感器、湿度传感器
课堂练习
D
课堂练习
服务器
智能终端
搭建信息系统
软件开发
软件开发
主要负责与具体数据管理系统衔接,为系统中需要长久存储的数据对象提供数据存储的方案。
数据管理设计
程序编写
客户端程序
服务器端程序
B/S结构不需要编写,浏览器就是客户端程序。
C/S结构需要编写。
B/S和C/S结构都需要编写。
数据加工处理
数据采集
数据传输
数据存储
数据呈现
搭建信息系统
软件开发——数据管理设计
服务器端可以保存特定传感器的所有记录以供后期分析。数据传输格式采用JSON,基于HTTP传送。
JSON是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,易于阅读和编写,同时也易于机器解析和生成。它能轻松地在服务器浏览器之间传输,并用作任何编程语言的数据格式。
{
"sensorid":"1",
"value":[
{
"sensorvalue":"29.0",
"updatetime":"2017-05-27 23:00:34"
}
]
}
温度数据保存格式样例
搭建信息系统
软件开发——数据管理设计
搭建信息系统
软件开发——智能终端功能
连接网络
串口初始化
等待WiFi连接成功
显示设备IP地址
传感器采集信息
读取温度模拟值转换为实际温度
LED点阵显示实际温度
提交请求
POST请求提交实时温度
GET请求提交阈值并返回警报状态值
终端输出控制
根据获取的Web端数据控制蜂鸣器高温警报
搭建信息系统
软件开发——智能终端
from microbit import *
import Obloq #导入OBLOQ IoT模块
SSID=“YingHuaJY" #Wi-Fi名称,英文字符
PASSWORD=“83320999" #Wi-Fi密码,英文字符
uart.init(baudrate=9600, bits=8, parity=None, stop=1, tx=pin2, rx=pin1)
#串口设置,波特率,数据位,奇偶校验,停止位数值,引脚设置
Obloq.connectWifi(SSID,PASSWORD,10000) #连接WiFi
display.scroll(Obloq.ifconfig()) #返回IP地址
连网
搭建信息系统
软件开发——智能终端
发送端
接收端
IoT模块接口:
“+”:连接扩展板正极
“-”:连接扩展板负极
TX:连接扩展板的Pin1
RX:连接扩展板的Pin2
搭建信息系统
软件开发——智能终端
Obloq.connectWifi(SSID,PASSWORD,TIME)函数
函数功能 配置obloq模块,接入对应的无线网络
参数 SSID 需要接入WiFi名称
PASSWORD WiFi密码
TIME 连接超时时间:在时间内一直尝试连接,单位:毫秒
函数返回值 连接成功,返回True;否则返回False
搭建信息系统
软件开发——智能终端
Obloq.ifconfig()函数
函数功能 接入对应的无线网络
函数返回值 连接成功,返回IP地址;连接失败或中断,返回””(空字符)
搭建信息系统
软件开发——智能终端
from microbit import *
import Obloq
IP="192.168.0.104" #Web服务器的IP地址
PORT="8080" #Web服务器的端口号
SSID="Tenda_435C78" #要连接Wi-Fi的SSID
PASSWORD="83320999" #要连接Wi-Fi的密码
uart.init(baudrate=9600, bits=8, parity=None, stop=1, tx=pin2, rx=pin1)
while Obloq.connectWifi(SSID,PASSWORD,20000) != True: #等待IoT模块成功接入Wi-Fi
display.show(".")
display.scroll(Obloq.ifconfig()) #显示IoT模块接入Wi-Fi网络相关信息
Obloq.httpConfig(IP,PORT) #HTTP配置,Web服务器IP地址和端口号
连服务器
搭建信息系统
软件开发——智能终端
Obloq.httpConfig(IP,PORT)
函数功能 配置http,设置被访问服务器的 IP 地址和端口号
(终端与服务器通过HTTP协议进行数据传输)
参数 IP 服务器IP地址
PORT 服务器端口号
函数返回值 连接成功,返回True;否则返回False
搭建信息系统
软件开发——智能终端
发送请求
errno,resp=Obloq.post("input","{\"Real_val\":"+str(temp)+"}",120000)
#通过post请求发送的数据需采用JSON格式,如:{"Real_val":"30"}
Obloq.post(URL,DATA,TIME)
函数功能 post请求,将数据以 JSON格式进行提交
参数 URL 提交的目标地址
DATA 需要提交的数据,JSON格式
TIME 连接超时时间,在该时间内一直尝试连接,单位毫秒
函数返回值 errno:请求状态码
200连接成功 400错误请求 404未找到 408请求超时
resp:请求返回的数据
搭建信息系统
软件开发——智能终端
什么是JSON(JavaScript Object Notation)?
是一种轻量级的数据交换格式
纯文本格式,可被任何编程语言作为数据来读取和使用
用于服务器浏览器之间的数据传输,提升网络传输效率
格式(“名称”:”值”):{"Real_val":"30"},{"name":"Bill Gates" ,...}
说明:
名称必须是字符串,双引号包围;
值的数据类型可以是字符串、数字、数组、对象、布尔、Null;
搭建信息系统
软件开发——智能终端
发送请求
errno,resp= Obloq.get("output?CP_val="+threshold,120000)
#通过 get 请求发送高温警报阈值,并从 Web 端获取高温警报状态值
Obloq.get(URL_DATA,TIME)
函数功能 get请求,将数据拼接在 URL中进行提交
参数 URL_DATA 提交的目标地址,包含提交的数据在内
格式:url ? val1=num1&val2=num2……
TIME 连接的超时时间,该时间内会一直尝试连接,单位毫秒
函数返回值 errno:请求状态码
200:连接成功 400错误请求 404未找到 408请求超时
resp:请求返回的数据
搭建信息系统
软件开发——智能终端
输出控制
if errno==200: #errno=200代表get请求响应成功
display.show(resp) #LED点阵显示高温警报状态值
if resp == "1": #根据获取值判断蜂鸣器是否发出高温警报
pin8.write_digital(1)
else:
pin8.write_digital(0)
搭建信息系统
软件开发——服务器端功能
服务器主页http://192.168.0.156:8080
子页面1 /input
提交实时温度
响应终端POST请求(JSON数据格式),获取实时温度
子页面2 /output
提交高温警报阈值返回高温警报状态
响应终端GET请求(警报阈值),返回根据实时温度处理得到的高温警报状态值
子页面3 /get
网页显示实时温度
响应浏览器提交的GET请求,返回显示当前实时温度
搭建信息系统
软件开发——服务器端
@app.route('/input',methods=['POST'])
#响应终端的post请求,获取实时温度
@app.route('/output',methods=['GET'])
#响应终端的get请求,返回警报状态值
@app.route('/get',methods=['GET'])
#响应网页的get请求,返回实时温度
搭建信息系统
软件开发——服务器端
data=str(request.json[' Real_val '])
#处理JSON格式数据的post请求
CP_Temp=request.args.get('CP_val')
#处理get请求
request.json['key']
函数功能 将 JSON数据转换成 Python类型
key 需要获取值的关键字
返回值 返回关键字key对应的值
request.args.get('key')
函数功能 获取 get请求中指定关键字中的值
key 需要获取值的关键字
返回值 返回关键字key对应的值
搭建信息系统
软件开发——服务器端
/input
@app.route('/input',methods=['POST']) #响应终端的post请求,获取实时温度
def collect_data():
global data #全局变量声明
data=str(request.json['Real_val']) #获取JSON格式数据中指定关键字的值
print("Real_Temp:",data)
return data
搭建信息系统
软件开发——服务器端
/output
@app.route('/output',methods=['GET']) #响应终端的get请求,返回高温警报状态值
def dispose_data():
global data #全局变量声明
CP_Temp=request.args.get('CP_val’) #获取get请求中指定关键字中的值
print("CP_Temp:",CP_Temp)
if float(data)>float(CP_Temp): #请求返回高温警报状态值
return "1"
else:
return "0"
搭建信息系统
软件开发——服务器端
/get
@app.route('/get',methods=['GET']) #响应网页的get请求,返回实时温度
def get_data():
global data #全局变量声明
return "传感器获取温度为:"+data+"℃ "
SQLite数据库
sql命令
创建表 create table 表名(字段名 字段类型,字段名 字段类型,……))
例 create table temp(time TEXT,data TEXT))
插入数据 insert into 表名(字段名1,字段名2)values(对应值1,值2)
例 insert into temp(time,data) VALUES(1022,22)
查询 select * from 表名 [where 条件]
例select * from temp
更新 update 表名 set 字段名=值 [where 条件]
例update temp set data=20
删除 delete from 表名 [where 条件]
例delete from temp where data=32
SQL语句字符不区分大小写
SQLite数据库
sqlites3
sqlite3数据库API
con=sqlite3.connect("data.db") 连接数据库(如果存在会直接打开,否则会自动创建)
cur=con.cursor() 创建游标(指针)
cur.execute() 执行SQL语句(可用问号为占位符)
cur.fetchall() 查询所有行,返回列表;
con.commit() 提交修改操作(增删改都需要提交)
cur.close()/con.close() 关闭游标/关闭数据库连接
搭建信息系统
聆
听
谢
谢
40
$$