在上节课,我们设计了一个智慧农业物联网系统,通过一块行空板来检测植物生长时的土壤湿度情况,将湿度数据上传到SIoT物联网平台进行远程查看并在湿度较低时从平台远程控制浇水。
然而,在真实的农业场景中,常常需要检测不同场所内的多样数据,并汇总到一个平台总站以便远程访问。
那么,在这节课上,让我们借助DFRobot的3块行空板,一起来设计一个多节点的智慧农业系统,模拟一下真实的农业场景吧。
任务目标
准备多块行空板(以3块为例),将所有行空板与电脑连接到同一个局域网段内。之后单独在第三块行空板上开启SIoT应用作为服务器,将通过第一块行空板检测到的土壤湿度数据和第二块行空板检测到的光线值数据,各自显示在屏幕上的同时,也发送到板3的SIoT物联网平台上;最后,使第三块行空板订阅物联网平台接收到的消息,将板1的土壤湿度情况和板2的光线强度情况一起显示在屏幕上,并且,当检测到的两个环境数据不佳时,自动给我们的邮箱发送一封警报邮件,以此来提醒我们及时浇水和补光。
知识点
- 学习使用3块行空板搭建多节点物联网系统的方法
- 掌握给行空板供电的多种不同的方式
- 掌握远程连接行空板并运行程序的不同方法
- 学习使用smtplib库发送邮件的流程
- 学习使用smtplib库发送邮件的具体方法
材料清单
硬件清单:
行空板x3 |
Type-C&Micro二合一USB线x3 |
土壤湿度传感器x1 |
12V/1000mA 电源适配器x1 |
简易继电器模块 x1 |
带水管潜水泵 x1
|
两头PH2.0-3P白色硅胶绞线x2 |
数字红色LED发光模块 x1 |
|
软件使用:Mind+编程软件x1
其他: 1、带植物的花盆 x1
- 盛有水的烧杯 x1
- 十字/一字两用螺丝刀 x1
- TypeC或USB-A口的电源适配器或充电宝 x3
知识储备
- smtplib库与email库
使用Python编程来发送邮件需要两个关键步骤,一步是构造邮件信息内容,另一步是发送邮件。前者,我们可以借助email库来实现,后者,我们可以使用smtplib库来进行。
2、email.mime.text包MIMEText模块创建邮件文本
email.mime.text包的MIMEText模块可在构造邮件时创建文本内容,使用时,需要先导入该模块,之后以实例化MIMEText()类的形式来创建文本对象。
from email.mime.text import MIMEText # 导入email.mime.text包中的MIMEText模块
msg=MIMEText('Hello World','plain','utf-8') # 创建邮件文本对象,‘Hello World’对应文本内容,'plain'指设置的文本格式,'utf-8'指设置的编码
其中,“Hello World”指要发送的文本内容,“plain”指文本的格式,“utf-8”指的是编码。
3、email.utils包formataddr模块格式化内容
email.utils包的 formataddr模块可在构造邮件时将输入的内容进行格式化操作,以便邮件服务器能够识别。使用时,需要先导入该模块。
from email.utils import formataddr # 导入formataddr模块,负责将输入的内容格式化
'''三个头部信息:发件人,收件人,主题'''
msg['From']=formataddr([my_name,my_sender]) # 定义发件人信息:括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To']=formataddr([my_user_name,my_user]) # 定义收件人信息:括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject']= '邮件测试' # 定义邮件的主题,也可以说是标题
其中,“msg['From']”表示邮件信息中发件人信息,包括邮箱、昵称;“msg['To']”表示邮件信息中收件人的信息,包括邮箱、昵称;“msg['Subject']”表示邮件的主题,文本内容“邮件测试”是它的具体内容。
这里,我们通过“formataddr()”函数将邮件的发件人信息和收件人信息文本进行了格式化操作。
4、smtplib库各功能函数
smtplib库可实现发送邮件功能,使用时,首先需要先导入该库,其次,通过其中的“SMTP_SSL()”函数来创建一个SMTP服务对象以连接邮箱,接着通过“login()”函数登录邮箱,之后使用“sendmail()”函数即可发送邮件,最后通过“quit()”函数退出与邮箱服务器的连接。
(1)smtplib库SMTP_SSL()函数创建SMTP服务对象
smtplib库中的SMTP_SSL()函数可创建SMTP服务对象以连接邮箱。使用时,首先需要先导入该库。 import smtplib # 导入smtplib库
server=smtplib.SMTP_SSL("smtp.qq.com", 465) # 创建SMTP服务,连接qq邮箱服务器,发件人邮箱中的SMTP服务器,SMTP协议加密端口是465
其中,“smtp.qq.com”指的是QQ邮箱服务器,“465”表示 SMTP协议加密端口。
(2)smtplib库login()函数登录邮箱
smtplib库中的login()函数可实现对发件人邮箱的登录。使用时,需设定好所要登录邮箱的账号和第三方登录授权码。
my_sender='10******[email protected]' # 设置发件人邮箱账号,输入自己的邮箱
my_pass = 'sq******ga' # 设置发件人邮箱授权码
server.login(my_sender, my_pass) # 登录邮箱,括号中对应的是发件人邮箱账号、邮箱密码
其中,“my_sender”指的是发件人邮箱账号,“my_pass”指的是发件人邮箱授权码。
(3)smtplib库sendmail()函数发送邮件
smtplib库中的sendmail()函数可实现邮件的发送。使用时,需设定好发件人邮箱账号、收件人邮箱账号和所要发送邮件信息内容。
msg=MIMEText(content,'plain','utf-8') # 创建邮件文本对象,Title对应文本内容,'plain'指设置的文本格式,'utf-8'指设置的编码
my_sender='10******[email protected]' # 设置发件人邮箱账号,输入自己的邮箱
my_user='10******[email protected]' # 设置收件人邮箱账号,我这边发送给自己
server.sendmail(my_sender,my_user,msg.as_string()) # 发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、邮件信息的字符串格式
其中,“my_sender”指的是发件人邮箱账号,“my_user”指的是收件人邮箱账号,“msg.as_string()”指的是将邮件定义为字符串格式。
(4)smtplib库quit()函数关闭连接
smtplib库中的quit()函数可关闭与邮箱服务器之间的连接。
server.quit() # 关闭连接
动手实践
任务描述1:前期准备
1、分析设计
在这个项目中,我们将完成多节点智慧农业系统的设计。首先,我们需要将3块行空板与电脑都连接在同一个局域网内(借助路由器/手机热点);之后,我们要将每一块板子轮流使用USB线连接电脑进行网络配置;最后,我们再单独开启其中一块板子的SIoT应用使其作为服务器,而其他板子作为客户端,通过编程将数据发送到SIoT物联网平台上。
2、配置网络
STEP1:将电脑连入路由器的Wi-Fi中
Tips :没有路由器也可通过手机开热点的方式实现联网。
STEP2:取一块板子,将其通过USB连接线连接到电脑。
STEP3:打开浏览器,登录“10.1.2.3”行空板网页菜单,配置网络,使其连在同一Wi-Fi中。
STEP4:完成后,拔下USB线,用同样的方式给其他两块行空板配置好网络。
STEP5:给3块板子上电,使其都保持开机状态
这里,给板子上电有以下三种方式,任选其一即可:
- 使用USB或type-c口输出的电源适配器
- 使用USB或type-c口输出的充电宝
- 通过电脑的USB端口
STEP6:检查各板子无线连接的IP地址。
依次查看并记录下3块板子的无线连接的IP地址,如下图,前三组数字应该是一样的,这说明我们成功将3块板子都连接在了同一局域网段内。
Tips:这里,三块板子的无线连接IP地址分别为“192.168.43.199”、“192.168.43.200”、“192.168.43.201”。
3、开启SIoT
STEP1:单独启动一块板子的SIoT服务
找到其中一块板子,按下HOME键进入菜单,单击“应用开关”,找到SIoT应用后点击启用,如下图所示。同时,确认其余两块板子SIoT应用关闭。
Tip1:这里,我们将SIoT服务启动在了IP为“192.168.43.201”的板子上。
Tip2:关闭其他板子的SIoT是为了避免如果输入地址错误导致数据不在同一个地方。
STEP2:检查电脑联网
打开浏览器,输入IP地址“192.168.43.201”并回车,进入行空板的网页菜单,找到应用开关下的SIoT服务,点击“打开页面”。
Tips:这里,需将“192.168.43.201”改为个人实际的IP地址。
如出现下列界面(物联网平台网页端),说明电脑和板子都连在了同一局域网内,且SIoT应用启动成功。
任务描述2:行空板1检测土壤湿度
这里,为了便于区分,我们将开启SIoT应用的板子记作行空板3,其余两块板子分别为行空板1和行空板2 。
这个任务中,我们将在行空板1的屏幕上显示一张智慧农业的背景图,使外接土壤湿度传感器检测到的湿度数据一边显示在屏幕上,一边发送到板3的SIoT平台上,这里的整体功能同上节课。
同时,对板1设定设置自动和手动两个模式,在自动模式下,当检测到的土壤湿度值过低时,通过外接继电器和水泵来自动浇水;在手动模式下,可通过点击屏幕上按钮的方式进行浇水;模式之间也可通过按钮手动切换。
此外,也可在SIoT物联网平台网页端发送“relay on”、“relay off”、“auto”和“manual”四个指令,远程控制浇水、关水、切换自动模式以及切换手动模式。
1、硬件搭建
STEP1:将土壤湿度传感器接入行空板1的P21引脚,继电器接入P23引脚
STEP2:利用螺丝刀将水泵正负线与转接头连接起来
STEP3:利用继电器将12V电源开关与水泵的转接头连接起来
STEP4:将继电器开关拨至NC端
STEP5:将水管和土壤湿度传感器插入花盆中,水泵固定在满水的烧杯中
STEP6:将12V电源开关插上220V电源插座
Tips :上述具体步骤皆可参考第8课。
2、程序编写
STEP1:创建与保存项目文件
启动Mind+,另存项目并命名为“010、多节点智慧农业系统01”。
STEP2:远程连接行空板
对不同的板子编程,我们可以同时打开多个Mind+,在各个Mind+中手动输入不同的IP地址,这样就可以连接访问不同板子了。
(1)选择“手动输入”
- 输入行空板1 的无线连接IP地址“192.168.43.199”
Tips:需改为个人实际的行空板1的IP地址,同时这里的板子须为正常开机状态且板子与电脑在同一个Wi-Fi下方可连接成功。
STEP3:在行空板1中创建一个新的文件夹,并命名为“多节点智慧农业系统”
Tips:这里,我们将程序直接建在板子中,这样可以便于直接通过行空板的Home菜单来运行程序而不需要启动MInd+运行,操作方法后续会介绍。
STEP4:创建与保存Python文件
在“多节点智慧农业系统”文件夹中创建一个Python程序文件“main1.py”,双击打开。
STEP5:导入素材文件夹
在“多节点智慧农业系统”文件夹中导入素材文件夹。(下载链接见附录1)
文章评论