动手学树莓派Python篇第13章:不论你身在何处,咱们都能聊天

来来来,咱们通过网页来聊天吧

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。

原程序版本: 

ifname=='main': app.run(host='0.0.0.0', port=80, debug=True, threaded=True)

我更改后的版本:

ifname=='main': SAKS=SAKSHAT() app.run(host='0.0.0.0', port=8080, debug=True, threaded=True)

核心点: 由”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

- 本文内容来自网络,如有侵权,请联系本站处理。

2022-12   阅读(15)   评论(0)
 标签: 编程

涨知识
SPI

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚。

评论:
相关文章
一文搞懂什么是信奥赛、CSP、NOI

信奥赛其实就是信息学奥林匹克竞赛,中国计算机学会(CCF)于1984年创办,是为全国青少年举办的计算机程序设计竞赛,属于五大奥赛之一(其余奥赛是数学、物理、化学和生物学)



Small Basic 编程入门 07 - 绘制图形

在这一章节中,我们将运用前面学到的知识来做一些有趣的事。


App Inventor 编程实例及指南-第10章 出题及答题

第8章的“总统测验”可以被定制成各种测验,但这种定制只对App Inventor程序员有用。只有程序员可以修改问题和答案,而对于父母、老师或其他用户来说,他们无法创建一个测验或变换问题(除非他们也学App Inventor!)。



Small Basic 编程入门 11 - 事件(Events)和交互(Interactivity)

事件就像被触发的信号,例如,为了应对类似移动或点击鼠标的用户操作。某种程度上说,事件同操作是相对的。对于操作,您作为一个程序员调用操作让计算机做一些事情;然后对于事件,计算机通知您一些有意思的事情发生了。



Small Basic 编程入门 03 - 引入变量

如果我们的程序能够对用户的姓名说“你好”而不只是单纯的“世界你好”,那样不是更好吗?


解魔方算法

Cube Explore和kcube算法。


App Inventor 编程实例及指南-第21章 定义过程

像App Inventor这类的编程语言通常会提供一组基本的内置功能,对于app inventor来说,就是一组基本块。