B/S和C/S都是随着互联网的发展而出现的一种网络结构模式。
下面是百度百科对B/S简介。
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。
下面是百度百科对C/S简介。
服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
干说很不好理解,咱们具体例子吧。
B/S结构,咱们经常浏览的网页,例如,百度、谷歌、新浪等网站就是B/S结构的。服务器为我们提供的绝大部分数据处理服务,我们看网站的终端,可以是高性能计算机、普通PC机、笔记本电脑、手机、甚至是咱们的树莓派。这种架构的好处就是,瘦客户端——胖服务器,我们的客户端(上网终端)硬件配置很低,最终就剩上网和浏览网页的功能了。
C/S结构,咱们手机上的大部分app、手机游戏就是C/S结构的。我们的终端设备(手机、计算机等)要有一定的计算能力、甚至还要对操作系统有要求(手机上的ios、安卓,计算机上的windows、linux、macos)。这种架构的好处就是,为用户可以提供绚丽的用户交互界面、提供实时响应更好的应用。
咱们下面就用B/S结构的方式,来与树莓派唠一会,这样我们可以使用任何含有浏览器软件的手机、计算机等终端来访问树莓派。避免了采用C/S结构方式,要为每种终端编写相应的app。
我参考的例程为“树莓派实验室”的“树莓派+Flask实现视频流媒体WEB服务器”。
具体源码在“camWebServer2”目录下,我做的一定的修改。
(1)修改了软件提供服务的端口,由80端口更改为8080。由于80端口已经被其他应用占用了。
(2)当前去掉了视频流的功能。我现在手头没有摄像头,就去掉了该功能。
(3)修改由“采集DKT22温、湿度数据”更改为“采集DP83848温度数据“。手头NXEZ树莓派瑞士军刀扩展模块提供DP83848传感器。
(4)新增”LED控制“功能。通过浏览器按键,可以控制树莓派LED灯点亮或者熄灭。
(5)新增网页自刷新功能,网页每3s进行一次自刷新(浏览器每3s向服务器请求一次服务)。
经过我做的修改后,您可以在当前软件基础上,新增LED灯状态采集、GPIO控制等,修改成自己的树莓派”聊天“工具。
让我们的服务“飞起来”
我们运行jupyter-notebook的终端;
使用命令”cd /home/pi/Notebooks/easy_use_raspi_by_python/13.不论你身在何处,我都能握住你的手/camWebServer2″目录;
使用命令”python appCam2.py &”已后台方式运行我们的树莓派服务程序;
在我的笔记本上,启动火狐浏览器(其他浏览器亦可),在地址栏输入”192.168.43.115:8080″即可访问树莓派服务程序。
界面给出了两组信息:温度值和系统时间值,这两组信息均有树莓派提供。
界面提供2个控制按键,控制树莓派上NXEZ“瑞士军刀”扩展板LED点亮或熄灭。
关闭服务。在终端中输入指令“ps -aux”查看”python appCam2.py“进程号,通过”kill pid_id(python appCam2.py进程号)”,来结束该进程。
(1)“温、湿度采集”改为“温度采集”
更改文件:appCam2.py。
原版本程序:
get data from DHT sensor
def getDHTdata():
DHT22Sensor = Adafruit_DHT.DHT22 DHTpin = 16 hum, temp = Adafruit_DHT.read_retry(DHT22Sensor, DHTpin)
if hum is not None and temp is not None:
hum = round(hum)
temp = round(temp, 1)
return temp, hum
我更改后的版本:
get data from DHT sensor
def getDHTdata():
#DHT22Sensor = Adafruit_DHT.DHT22
#DHTpin = 16
#hum, temp = Adafruit_DHT.read_retry(DHT22Sensor, DHTpin)
hum = 1
temp = SAKS.ds18b20.temperature
if hum is not None and temp is not None:
hum = round(hum)
temp = round(temp, 1)
return temp, hum
核心点, 由“hum, temp = Adafruit_DHT.read_retry(DHT22Sensor, DHTpin)”更改为“temp = SAKS.ds18b20.temperature”
(2)更改服务端口由“80“端口变为“8080”端口。
更改文件:appCam2.py。
原程序版本:
我更改后的版本:
核心点: 由”app.run(host=’0.0.0.0′, port =80, debug=True, threaded=True)“更改为”app.run(host=’0.0.0.0′, port =8080, debug=True, threaded=True)“
(3)新增led点亮按钮
更改文件:appCam2.py。
新增程序:
@app.route('/led_light') def led_on():
#点亮所有LED灯
SAKS.ledrow.on()
timeNow = time.asctime( time.localtime(time.time()) )
temp, hum = getDHTdata()
templateData = {
'time': timeNow,
'temp': temp,
'hum' : hum
}
return render_template('index.html', **templateData)
更改文件:templates/index.html。
增加了”LED_ON”按钮,按钮有效后,运行@app.route(‘/led_light’)程序,就完成了led点亮工作。
led熄灭新增功能一致,可自行阅读。
(4)网页自刷新功能
更改文件:templates/index.html。
课程 bilibili 视频地址:https://www.bilibili.com/video/av71878718/?p=24
导轨又称滑轨、线性导轨、线性滑轨,用于直线往复运动场合,拥有比直线轴承更高的额定负载, 同时可以承担一定的扭矩,可在高负载的情况下实现高精度的直线运动。
怎么通过软件捕捉自然界难以捉摸的演进和突变? 理解物理世界背后的数学原理对我们创造数字世界有多大帮助?
假设你正在一家你很喜欢的书店里翻书,你想了解某一本书在Amazon.com(网上书店)的售价,那么这款“亚马逊掌上书店”应用就可以帮你实现这一愿望。
Python图像处理库,该库支持多种文件格式,提供强大的图像处理功能。
老师将陆续给大家解析一些现在比较热门的图形化编程竞赛或考级真题,所有真题都来源于网上大家的分享,老师给大家进行系统的整理和个人解析。
本文档面向希望创建自己的应用程序的开发人员,这些应用程序将Blockly集成为代码编辑器。