admin 管理员组文章数量: 1184232
2024年4月29日发(作者:斗战神按键精灵编程)
技术与应用
*********************
生活·技术·探索
用Python写一个基于Web的
物联网应用程序
寒假期间,忙里偷闲设计了一
个名叫“sfarm”的开源智慧农场
方案。sfarm采用了应用最广泛的
MQTT协议,多节点设备汇集到一
个服务器上,不仅能自动灌溉,还实
现了远程控制,定时采集各种数据。
方案中涉及的开源硬件、传感器、电
磁阀和其他灌溉设备,在淘宝上都
能买到,因而得到了很多朋友的关
注。其中福州连江五中的卢老师就
在学校的大花坛上部署了一套,运
行效果很好。
虽然系统运行正常,但很快就
产生了新的需求:当有嘉宾或者学
生来参观智慧农场系统的时候,如
何快速展示这一系统的“物联”功
能?毕竟打开SIoT(MQTT服务器)
的Web管理页面,再进行演示总不
够便捷,也难以体现个性化。这就
需要写一个物联网应用程序,对接
入的各个节点设备进行直观的管
理。当然,我们期望这个物联网应用
程序的开发难度不能太高,最好学
生也能够开发。这样,智慧农场就和
学生的物联网学习、编程学习密切
结合起来了。
78
中国信息技术教育
谢作如 浙江省温州中学
●
用Web方式开发物联网应
用程序的优势分析
物联网应用程序的开发有很多
种方式可以选择,比较常见的是用
VB、C#之类的语言来编写,但是开
发的应用程序要运行在电脑上,无
论是演示还是平时管理都不够灵
活。用App inventor编写一个手机
App也是不错的选择,技术门槛也
低,中学生大都能参与编写。但美中
不足的是,这个App要事先安装,而
且只能运行在安卓手机上,不够灵
活且不具备普适性。
用类Scratch的软件来编写应
用程序,也是可行的一种选择,如
Mind+(一款图形化编程软件)内置
了MQTT模块,可以编写物联网应
用程序。Mind+的门槛很低,小学生
也能够编写出一个非常个性化的物
联网应用。但遗憾的是,Mind+的代
码不能脱离Mind+环境运行,也不
能编译为一款独立的软件。
毫无疑问,最灵活的方式肯定
是采用B/S架构,编写一个单独的
管理网页,即WebApp。在服务器上
运行该程序,任何手机的浏览器都
能打开这个特定的网页,看到各种
采集的数据,还可以通过网页按钮
来控制“浇水”。这样的应用场景显
然很“智能”很“贴心”,但遗憾的是,
编写WebApp一般需要掌握一定的
网页前端开发技术,而目前学生普
遍缺少这方面的编程基础。
●
用Python开发WebApp
能不能用Python来编写
WebApp?现在的中学信息技术教
材几乎都采用Python语言了,如果
能够用Python来编写网页,学生就
不需要学习HTML、JS和CSS等网
页开发技术。当然,答案是肯定的,
一个名叫“Remi”的Python库,就
是用来开发WebApp的。
库简介
Remi是一个用于Python应
用程序的GUI库,它将应用程序的
界面转换为HTML,以便在Web浏
览器中呈现。严格地说,我们不能
用Remi库来编写传统的网站,而
只将他当成Web形式的Tkinter库
(Python最经典的图形界面库)来
使用。如果要做网站,还是要老老实
实学点前端知识,然后结合Python
*********************
技术与应用
from remi import start, App, gui
class MyApp(App):
def init(self, args):
super(MyApp, self).init(args)
def main(self):
container = (width=300, height=200, style={'margin':'5px auto'})
= ('你好,我是一个WebApp!')
= ('请点击这里')
(_button_pressed)
()
()
return container
def on_button_pressed(self, widget):
_text('你点击了按钮!')
start(MyApp)
图1
库(paho-mqtt)编写出来的代码冗
长,不好理解,于是委托上海蘑菇云
团队在paho-mqtt的基础上进行了
新的封装。siot库可以通过pip命令
来安装,命令如下:
pip install siot
1.物联网应用的工作流程
因为“sfarm”每一个节点都
有采集土壤、光线信息的功能,都
具备单独的电磁阀,用物联网消
息来控制。那么,这个应用程序既
需要显示消息,又要能够发送消
息(控制指令),工作流程如图4所
的Flask框架来开发。
库的安装
Remi可以采用pip命令安装,
具体如下:
pip install remi
库的代码示例(如图1)
运行这段代码后,浏览器会自
动打开一个本地的网址,出现如图2
所示的界面。将“127.0.0.1”换成IP
地址,就能通过其他电脑、手机的浏
览器来访问了。
点击“请点击这里”按钮,界面
会发生变化,如图3所示。不用写复
杂的JS代码,在Remi的支持下,网页
交互就变得这么简单。
如果需要了解更多关于Remi
库的资源,可以访问github或者官
方文档。
github地址:/
dddomodossola/remi
文档地址:remi.
/en/latest/
示。其实,绝大多数的物联网应用
程序,都需要同时具备订阅和发送
消息功能。
2.核心代码1:物联网消息的
订阅
因为要同时订阅多个主题的消
息,代码中采用了“定点存放定时处
理”的方式,即先将接收到的消息
放在一个字典(topic_msg_map)
中,然后定时在字典中查找是否有
新消息,读取新消息后就删除这一
消息,避免重复读取。参考代码如下
页图5所示。
3.核心代码2:物联网消息的
显示
显示消息需要不断刷新网页
图2
●
基于Remi编写基于Web的
物联网应用程序
既然是编写物联
网应用程序,那么肯定
还需要安装siot库。这
也是“虚谷物联”团队
开发的Python库,因为
图3
MQTT的官方Python
图4
MAY. 2021 NO.09
79
技术与应用
*********************
import siot,time
topic_msg_map={}
iot_server = '192.168.3.136' # mqtt服务器地址
iot_user = 'scope'
iot_pwd = 'scope'
projectid = 'sf88' # 项目编号
def on_topic_subscribe(client,userdata,msg):
global topic_msg_map
topic_msg_map[str()]=str(())
def on_topic_read(topic):
global topic_msg_map
result=topic_msg_(topic,None)
if result:
del topic_msg_map[topic]
return str(result)
('',iot_server,user=iot_user,password=iot_pwd)
t()
ibe(projectid + '/light',on_topic_subscribe)
ibe(projectid + '/soil',on_topic_subscribe)
()
图5
def showmqtt(self):
while True:
getcmd = on_topic_read(projectid + '/light')
if getcmd:
__text('环境光照值:' + getcmd)
getcmd = on_topic_read(projectid + '/soil')
if getcmd:
(target=tt)
()
图6
def on_button_pressed(self, widget):
global i,projectid
i=i+1
h(projectid + '/relay','1')
__text('成功发送浇水指令!次数:' + str(i))
图7
组件中的文字,这需要启动一个如图6所示。
新的进程来处理,然后在这个进
4.核心代码3:物联网消息的
程中不断循环读取字典(topic_
发送
msg_map)中的消息。参考代码消息发送通过“浇水”按钮来
80
中国信息技术教育
实现。参考代码如图7所示。
5.核心代码4:物联网设备的
切换
sfarm是一个多节点工作的
物联网系统,因而需要加上设备切
换功能,比较简单的做法是用一个
列表(project_list)记录需要呈现
的设备名称,然后在切换时修改全
局变量(id)。参考代码如下页图8
所示。
●
运行效果和反馈
Python的神奇,就在于其拥
有无穷无尽的“库”,能够用来快
速解决问题。从找到Remi库到写
出代码,我仅仅花了一个晚上的时
间,这种编程的感觉特别好。最终
的代码运行效果如下页图9所示。
福州连江五中的卢老师将代
码运行在sfarm系统的物联网服
务器上,然后将访问地址做成二
维码,用手机扫码(手机要能够
访问服务器)的方式来打开这个
网页,效果很不错,如下页图10所
示。从难度上看,只要有Python
编程基础,就能编出类似的程序。
他正在将这方面的内容开发成一
个物联网课程,让学生真正参与
到sfarm的开发和维护中。
完成了这个物联网应用后,
最大的收获并不是解决了sfarm
系统的演示问题,而在于找到了
一种设计Python程序界面的新
方法。例如,可以用Remi库写一
个基于Web的校园气象站、摄像
头远程控制程序等。相对来说,用
*********************
技术与应用
信息技术实验
字符的输入:计算机键盘的奥秘
丁伟 李艳 山东省淄博市博山区山头中心学校
随着技术的发展,计算机更多
地被用来处理文字、图像、声音、视
频等非直接用二进制形式呈现的信
息。例如,用键盘输入文章,就需要
把字母转换为计算机能够识别的二
进制数据,然后对它们进行存储和处
理,转换的过程需要用到计算机编码
的知识。现代的键盘就是使用ASCⅡ
编码的方式实现字符的输入的。
本实验通过使用掌控板模拟
键盘按键输入,让学生了解键盘
上的符号是如何通过编码的方式
输入到计算机中的。然后再通过
一个趣味输入的实验来体验其他
的输入方式。首
先,我们了解一下
Python如何读取
转换ASCII码。
●
Python进
行ASCII码转换
在Python
中使用ord函数将
ASCⅡ字符转换为对应的数值,反
之,使用chr函数,将数值转换为对
应的ASCⅡ字符,如图1所示。
图1 Python进行ASCII码转换
# 设备编号默认先呈现第一个
id = 0
def main(self):
container = (width=400, height=340,style={'margin':'0px auto'})
project_list= ['sf88','sf89']
= wn(['设备编号:' + x for x in
project_list],width=150,style={'font-size': '12px'})
(_dropdown_onchange)
return container
def on_dropdown_onchange(self, emitter, new_value):
global id
id = project_(new_value[5:])
图8
Remi库开发WebApp,比Flask
(一个Python开发的Web框
架)要简单得多,后者需要了解
大量的HTML、JS和CSS之类的
知识,对中学生来说门槛略高了
一些。
图9
图10
MAY. 2021 NO.09
81
版权声明:本文标题:用Python写一个基于Web的物联网应用程序 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1714351654a676733.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论