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
智能体(Agent)是指能够感知环境并采取行动以实现特定目标的代理体。它可以是软件、硬件或一个系统,具备自主性、适应性和交互能力。智能体通过感知环境中的变化(如通过传感器或数据输入),根据自身学习到的知识和算法进行判断和决策,进而执行动作以影响环境或达到预定的目标。
MicroPython中内置了许多好听的音乐,你可以直接调用他们直接播放。
随着国家持续推进AI与科学教育的发展,以及大量资本的入场,少儿编程教育市场呈火热趋势,目前市场上已有超过200家少儿编程公司,并且这一趋势很可能依旧延续。虽然对于孩子是否必须学编程,行业内仍存在着不同的声音,但不可否认,少儿编程正在由“非刚需”向“刚需”逐渐转变。
报告分析了少儿编程行业政策演变过程和发展趋势、中美少儿编程差异点、行业现状和主流模式、当前痛点及应对方式,并测算市场规模,梳理代表性企业及其亮点,预测未来少儿编程行业趋势及格局。
计算机最擅长做的事情就是“重复”——像儿童一样不厌其烦地重复做一件事,而且重复的速度很快,可以在1毫秒内列出你的全部Facebook好友。
micro:bit主板上配备有一个加速度计,可以很好的检测mincro:bit在空间中的位置以及移动方向。
micro:bit 是一款由英国广播电视公司(BBC)推出的为青少年编程教育设计的微型电脑开发板, 集成了低功耗蓝牙,加速度计,磁力计,三个按钮,5 x 5 LED点阵以及GPIO。
今年(2020)NOC西瓜创新编程赛复赛已经结束了,我们来了解它复赛模拟题吧!
Turtle库是 Python中自带的用于绘制图形、图像的函数库。
Kociemba算法,又称为二阶段算法,是一个使用较短时间和较少次数还原魔方的算法。
本章将从程序员的视角来探讨应用的结构问题。先从一个经典的比喻开始,将应用理解为一份菜谱,然后再从组件的角度,理解其对事件的响应,从而对应用产生新的认识。