锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

蘑菇云「行空板Python入门教程」第九课-智慧农业物联网系统2

时间:2022-08-27 02:30:00 传感器电源插座

5G元年的火车早已驶出,人工智能、大数据的浪潮依然汹涌,云办公、云咨询成为防疫期间的热词。

现如今,物联网技术正处于时代发展的风口,相较于传统的硬件设备,物联网技术使得各种硬件设备能够通过信息传输设备与互联网连接起来,继而进行信息的传递,以实现智能化识别与管理,为人们的日常生活带来便捷。

我们利用上节课DFRobot新出品的Python学习工具-行空板设计了智能农业可视化系统,模拟了农业作物生长环境的实时监测和改善。然而,监测到的数据只能显示在行空板的屏幕上,我们必须靠近行空板才能观察,这非常不方便。那么,我们如何呆在家里,远程了解实时的环境数据呢?

让我们试着用强大的物联网技术来模拟智能农业物联网系统,解决这个问题。

任务目标

屏幕上显示通过土壤湿度传感器检测到的湿度值,同时打开SIoT物联网系统将数据同步传输到物联网平台查看。当观察到的土壤湿度值较差时,通过在物联网平台的网页端输入指定字符on”和“off控制继电器和水泵的浇水。

知识点

1.了解物联网,MQTT、SIoT

2、学习使用SIoT库连接物联网平台的方法

3、学习使用SIoT库向物联网平台发送消息的方法

4、学习使用SIoT仓库接收物联网平台消息的方法

材料清单

硬件清单:

软件使用:Mind 编程软件x1

其他: 带植物的花盆 x1

2.有水的烧杯 x1

三、十字/一字两用螺丝刀 x1

知识储备

1、物联网

物联网(Internet of Things,简称IoT)借助互联网、传统电信网等信息载体,所有能够行使独立功能的普通物体都能实现互联网。

物联网是互联网的延伸,互联网终端是计算机(PC、服务器),物联网的终端是硬件设备(手机、电脑、传感器等)。).通过物联网,我们可以使用中央计算机连接各种机器和设备进行集中管理,实现物联网。例如,家里的灯、风扇、空调和其他电器可以通过手机控制开关

2、MQTT

计算机为了联网,就必须规定通信协议,就好比一群不同国家的人在一块儿,只有说同一种语言才能实现互相交流。同样,实现万物互联也需要一套协议。事实上,物联网系统的建设可以通过许多协议来实现。常用的物联网应用层协议包括MQTT、HTTP、XMPP、CoAP等。我们在这里采用的是MQTT,我们可以在物联网上传输信息。

MQTT是基于客户端-服务器的新闻发布/订阅传输协议,服务器是我们要建立的物联网平台的载体。客户端可以是信息发布者或订阅者。服务器可以连接到每个客户端。举个例子,邮局大家都不陌生,我们可以到邮局寄信和收信。当我们寄信时,我们是邮局的信息发布者,当我们收到信息时,我们成为订阅者。同时,我们都是客户,无论是寄信人还是收信人。邮局的平台是所谓的服务器,为我们提供们提供收发服务。

当出版商有新数据要分发时,它会将包含数据的控制信息发送到服务器。然后,服务器将信息分发给已订阅主题的任何客户端。出版商不需要任何关于订阅者数量或位置的数据,也不需要配置任何关于出版商的数据。

另外,MQTT传输的信息可分为:Topic和payload两部分

(1)Topic,可以理解为新闻类型。订阅后,订阅者将收到主题的新闻内容(Payload);

(2)payload,可以理解为新闻的内容是指订阅者想要接收的内容。

3、SIoT

SIoT为教育定制的跨平台开源MQTT服务器程序,S指科学(science)、简单(simple)的意思。SIoT支持Win10、Win7、Mac、Linux一键启动等操作系统,无需用户注册或系统设置即可使用。

SIoT它还旨在帮助中小学生理解物联网的原则,并可以在物联网技术的基础上开发各种创造性的应用程序。它是收集科学数据的最佳选择之一,因为它专注于物联网数据的收集和导出。

这里,就行空板而言,SIoT应用程序已经内置在板上,所以在使用时,我们可以通过点击应用开关直接打开服务。同时,为了方便它的使用,我们开发了名为SIoT”的Python库,旨在通过写作Python程序来连接MQTT服务器以及实现消息的传输。

实际使用时,打开SIoT我们可以用服务器连接传感器检测数据的行空板(设备)作为客户端。

如果在同一块板上打开SIoT连接传感器检测数据的服务,既是客户端又是服务器。

Tips:在本课程中,我们将通过一块板实现物联网功能,在下一节课中,我们将使用三块板模拟多节点物联网系统。

4、SIoT库常见函数

(1)init()、connect()、loop()函数初始化,连接物联网平台

SIoT库中的init()函数可用于与物联网平台的初始连接。在使用之前,我们需要先导入仓库,然后设置连接物联网平台所需的参数,包括服务器IP使用地址、物联网平台账户用户名、账户对应密码init()连接验证函数,验证成功后通过connect()和loop()函数与平台连接。

import siot # 导入SIoT库

SERVER = "10.1.2.3" # MQTT服务器IP,输入个人现实Ip

CLIENT_ID = "" # 在SIoT上,CLIENT_ID可以留空

IOT_UserName = 'siot' # 用户名

IOT_PassWord = 'dfrobot' # 密码

siot.init(CLIENT_ID, SERVER, user=IOT_UserName,password=IOT_PassWord) # 初始化,确定输入的用户名和密码正确

siot.connect() # 连接SIoT物联网平台

siot.loop() # 循环

其中,SERVER指的是开启siot连接服务器的服务IP地址;CLIENT_ID指客户端标识符,是客户端到服务器的唯一标识,我们不能在这里输入内容; user指物联网平台账户的用户名;password指帐户对应的密码。

(2)publish()函数向物联网平台发送消息

在连接上SIoT物联网平台后,通过SIoT库的publish函数可以将消息发送到平台,使用时需要先后指定发送的主题Topic(目的地)和发送的消息。

IOT_pubTopic = 智能农业物联网系统/Soil_moisture_value' # 湿度topic,项目名称/设备名称

Soil_moisture_value = adc0.read_analog() # 读取模拟值

siot.publish(IOT_pubTopic, Soil_moisture_value) # 向物联网平台发布信息

其中,IOT_pubTopic指主题Topic,包括项目ID设备名称;Soil_moisture_value指要发送的土壤湿度数据消息。

Tips:SIoT同时在平台上使用Topic表示了项目ID因此,还有设备名称Topic两者需要/符号分开,否则物联网平台看不到项目。

(3)subscribe()函数订阅物联网平台新闻

在连接上SIoT物联网平台后,通过SIoT库的subscribe()函数可以订阅平台发送的信息,使用时需要先后指定发送的主题Topic(目的地)以及收到平台消息后要执行的操作。

IOT_pubTopic = 智能农业物联网系统/Soil_moisture_value' # 湿度topic,项目名称/设备名称

def sub_relay(client, userdata, msg):

topic = msg.topic

payload = msg.payload.decode()

接到指令时定义操作‘'''

print("\nTopic:" topic " Message:" payload) # 打印收到的信息

if payload == 'on': # 如果收到收到on”

img.config(w=240, h=320, image='img/浇水1.png')

relay.write_digital(1) # 高电平输出继电器

elif payload == 'off': # 如果收到收到off”

img.config(w=240, h=320, image='img/关水1.png')

relay.write_digital(0) # 低电平输出继电器

siot.subscribe(IOT_pubTopic, sub_relay) # 订阅消息

其中,IOT_pubTopic指主题Topic,包括项目ID设备名称;sub_relay定义接收平台信息后要执行的功能函数;msg.topic指的是新闻中的Topic主题;msg.payload指新闻内容;decode()将消息内容转换为字符串,便于判断后续条件。

动手实践

任务描述1:发送湿度数据至SIo物联网平台

启动SIoT物联网系统,通过外接土壤湿度传感器检测湿度值后,将数据显示在屏幕上的同时也发送至SIoT物联网平台并在平台网页端查看。

1、硬件搭建

STEP1:通过USB连接线将行空板连接到计算机

STEP2:将土壤湿度传感器接入行空板的P21引脚

STEP3:将土壤湿度传感器插入花盆中

STEP4:启动SIoT服务

按下HOME键进入菜单,单击“应用开关”,找到SIoT应用后点击启用,如下图所示。

STEP5:查看ip并记录

按下HOME键进入菜单,单击“查看网络信息”,找到SIoT应用后点击启用,如下图所示。

Tips:“10.1.2.3”为板子通过USB线连接电脑后的固定IP地址。这里我们将它记录下来,后续有用。

2、程序编写

STEP1:创建与保存项目文件

启动Mind+,另存项目并命名为“009、智慧农业物联网系统”。

STEP2:创建与保存Python文件

创建一个Python程序文件“main1.py”,双击打开。

STEP3:导入图片文件夹

在项目文件夹中导入背景图文件夹。(图片文件夹与程序文件同在项目文件夹中,下载链接见附录1)

STEP4:程序编写

(1) 导入所需功能库

在这个任务中,我们需要使用Pinpong库来使土壤湿度传感器读取数值并显示在屏幕上,因此,我们需要导入Pinpong库和unihiker库中的GUI模块,同时,为了能将数据实时发送至SIoT物联网平台,我们还需导入SIoT库。

(2) 实例化GUI类并初始化板子和引脚

之后我们创建gui对象并初始化板子和引脚以便后续能使用屏幕功能和控制传感器工作。

(3) 设置参数并连接SIoT平台

接下来,我们将创建与SIoT物联网平台的连接,在这之前,我们先设定好连接时所需要的参数,包括ip地址,CLIENT_ID,用户名,密码以及topic,之后进行连接并保持连接状态。

Tips:这里的IP地址为之前记录的“10.1.2.3”。

(4) 显示背景图、填充矩形和初始文字

紧接着,我们在行空板的屏幕上显示一张背景图,并添加填充矩形和初始文字,以便后续直接在此更新数据显示。

(5) 检测土壤湿度并将数据显示在屏幕及发送到SIoT物联网平台

最后,我们设置通过传感器来读取检测数据,将湿度值发送到物联网平台的同时也显示在屏幕上,而为了使得上述操作能每隔一秒不停地执行,这里,我们使用while语句。

Tips:完整示例程序如下:

3、程序运行

STEP1:远程连接行空板,运行程序并观察效果

观察行空板,可以看到在智慧农业的背景图上,每隔一秒显示着检测到的土壤湿度值。

STEP2:平台网页端查看消息

(1)打开浏览器,输入“10.1.2.3”后回车,进入行空板的网页菜单,找到应用开关下的SIoT服务,点击“打开页面”。

(2)输入默认的账号“siot”,密码“dfrobot”,点击登录

(3)点击“智慧农业物联网系统”项目下的“查看设备列表”

可以看到“项目ID”、“名称”分别对应为程序中“IOT_pubTopic”的信息

(4)点击“查看消息”

随后我们就可以查看到“智慧农业物联网系统/Soil_moisture_value”这个Topic的MQTT消息记录啦,并伴有具体的消息内容及发送时间,这就是我们检测到的该时刻的土壤湿度值,如下图。

(5)点击“自动刷新消息”

通过刷新消息,我们发现土壤湿度数据每隔一秒进行了更新,如下图,

(6)点击“隐藏/显示图标”

点击后,我们可以发现数据以图表的形式呈现了出来,如下图。

(7)点击“导出查询结果”

这里我们可以将数据以表格的形式下载下来以便后续作进一步分析。

任务描述2:平台网页端控制浇水

在上一任务中,我们实现了将土壤湿度传感器检测到的数据上传到SIoT物联网平台,并从平台的网页端实时查看湿度值,接下来,我们给板子添加订阅平台消息的功能,使得我们能够在土壤较干燥的时候通过SIoT物联网平台的网页端来及时控制浇水。

1、硬件搭建

STEP1:将继电器接入行空板的P23引脚

STEP2:利用螺丝刀将水泵正负线与转接头连接起来,具体步骤同上节课。

STEP3:利用继电器将12V电源开关与水泵的转接头连接起来

STEP4:将继电器开关拨至NC端

STEP5:将水泵固定在满水的烧杯中

STEP6:将水管插入花盆中

2、程序编写

STEP1:创建与保存项目文件

新建一个Python程序文件“main2.py”,双击打开。

Step2:程序编写

(1)初始化引脚

这里,由于我们将使用继电器控制水泵进行浇水,因此我们需要补充对继电器引脚的初始化操作,设置其23号引脚为数字输出模式。

(2)定义接收到平台消息后的操作

由于后续我们将接收平台发送的消息,当消息为“on”时,控制继电器输出高电平来浇水,当消息为“off”时,控制继电器输出低电平停止浇水。因此在这里,我们补充定义一个回调函数,来表示接收到平台消息后需执行的操作,以便在后续调用。

(3)订阅平台发送的消息

最后,为了能接收到物联网平台发送的消息,这里,我们在连接上平台后补充一下对消息的订阅。

Tips:完整示例程序如下:

3、程序运行

STEP1:将12V电源开关插上220V电源插座

STEP2:远程连接行空板,运行程序并观察效果

观察行空板,可以发现湿度值依旧不停得更新显示在屏幕上。

STEP3:平台发送消息

观察检测到的突然湿度数据,当湿度值过低时,我们在网页端指定位置输入“on”,并点击发送,可以发现继电器开始工作,控制水泵不断将烧杯中的水抽入花盆中。

之后,当水量合适后,我们再在消息框中输入“off”,点击发送后,可以发现水泵停了下来。

挑战自我

想一想,在农业系统中,还有哪些因素是会影响庄稼生长的呢,我们有何方法来检测它吗,自己来研究一下吧,并结合物联网平台,试着以远程的方式分析一下它对庄稼的影响规律吧!

更多行空板Python入门教程学习请关注“蘑菇云创造”公众号。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章